From f546c7605acfc35fb77e08b95aa3ec469b04024d Mon Sep 17 00:00:00 2001 From: gigara Date: Fri, 31 Oct 2025 07:24:08 +0530 Subject: [PATCH 01/55] Add WI extension and related packages --- .vscode/launch.json | 32 +- .vscode/tasks.json | 16 + common/config/rush/pnpm-lock.yaml | 321 +++++++++++++++++- rush.json | 16 + .../ballerina-extension/package.json | 8 +- .../choreo/choreo-extension/package.json | 2 +- workspaces/common-libs/rpc-generator/index.js | 2 +- .../common-libs/rpc-generator/package.json | 10 +- workspaces/mi/mi-extension/package.json | 4 +- workspaces/wi/wi-core/biome.json | 30 ++ .../wi/wi-core/config/rush-project.json | 3 + workspaces/wi/wi-core/package.json | 29 ++ workspaces/wi/wi-core/src/constants.ts | 57 ++++ workspaces/wi/wi-core/src/enums.ts | 44 +++ workspaces/wi/wi-core/src/index.ts | 23 ++ .../wi/wi-core/src/rpc-types/main/index.ts | 28 ++ .../wi/wi-core/src/rpc-types/main/rpc-type.ts | 26 ++ .../wi/wi-core/src/types/common.types.ts | 63 ++++ workspaces/wi/wi-core/src/types/index.ts | 20 ++ workspaces/wi/wi-core/src/types/rpc.types.ts | 28 ++ .../wi-core/src/types/webview-props.types.ts | 48 +++ workspaces/wi/wi-core/src/utils.ts | 45 +++ workspaces/wi/wi-core/tsconfig.json | 20 ++ workspaces/wi/wi-extension/.env.example | 15 + workspaces/wi/wi-extension/.gitignore | 5 + .../wi/wi-extension/.vscode/launch.json | 30 ++ .../wi/wi-extension/.vscode/settings.json | 5 + workspaces/wi/wi-extension/.vscode/tasks.json | 36 ++ workspaces/wi/wi-extension/.vscodeignore | 1 + workspaces/wi/wi-extension/CHANGELOG.md | 14 + workspaces/wi/wi-extension/LICENSE | 60 ++++ workspaces/wi/wi-extension/README.md | 82 +++++ workspaces/wi/wi-extension/biome.json | 30 ++ .../wi/wi-extension/config/rush-project.json | 3 + workspaces/wi/wi-extension/package.json | 113 ++++++ .../resources/icons/integrator-icon.svg | 10 + .../resources/icons/wso2-integrator-logo.png | 23 ++ workspaces/wi/wi-extension/src/extension.ts | 148 ++++++++ .../wi/wi-extension/src/extensionAPIs.ts | 135 ++++++++ .../wi/wi-extension/src/extensionVariables.ts | 59 ++++ .../src/rpc-managers/main/rpc-handler.ts | 34 ++ .../src/rpc-managers/main/rpc-manager.ts | 41 +++ .../wi/wi-extension/src/treeDataProvider.ts | 167 +++++++++ .../wi/wi-extension/src/webviewManager.ts | 275 +++++++++++++++ workspaces/wi/wi-extension/tsconfig.json | 18 + workspaces/wi/wi-extension/webpack.config.js | 35 ++ .../wi/wi-rpc-client/config/rush-project.json | 3 + workspaces/wi/wi-rpc-client/eslint.config.cjs | 31 ++ workspaces/wi/wi-rpc-client/package.json | 37 ++ workspaces/wi/wi-rpc-client/src/RpcClient.ts | 40 +++ workspaces/wi/wi-rpc-client/src/index.ts | 19 ++ .../src/rpc-clients/main/rpc-client.ts | 49 +++ workspaces/wi/wi-rpc-client/src/vscode.ts | 95 ++++++ workspaces/wi/wi-rpc-client/tsconfig.json | 44 +++ workspaces/wi/wi-webviews/biome.json | 30 ++ .../wi/wi-webviews/config/rush-project.json | 3 + workspaces/wi/wi-webviews/package.json | 44 +++ .../wi/wi-webviews/src/IntegratorWebview.tsx | 38 +++ workspaces/wi/wi-webviews/src/index.tsx | 37 ++ workspaces/wi/wi-webviews/src/style.css | 36 ++ .../wi/wi-webviews/src/views/WelcomeView.css | 167 +++++++++ .../wi/wi-webviews/src/views/WelcomeView.tsx | 135 ++++++++ workspaces/wi/wi-webviews/tsconfig.json | 45 +++ workspaces/wi/wi-webviews/webpack.config.js | 77 +++++ 64 files changed, 3116 insertions(+), 28 deletions(-) create mode 100644 workspaces/wi/wi-core/biome.json create mode 100644 workspaces/wi/wi-core/config/rush-project.json create mode 100644 workspaces/wi/wi-core/package.json create mode 100644 workspaces/wi/wi-core/src/constants.ts create mode 100644 workspaces/wi/wi-core/src/enums.ts create mode 100644 workspaces/wi/wi-core/src/index.ts create mode 100644 workspaces/wi/wi-core/src/rpc-types/main/index.ts create mode 100644 workspaces/wi/wi-core/src/rpc-types/main/rpc-type.ts create mode 100644 workspaces/wi/wi-core/src/types/common.types.ts create mode 100644 workspaces/wi/wi-core/src/types/index.ts create mode 100644 workspaces/wi/wi-core/src/types/rpc.types.ts create mode 100644 workspaces/wi/wi-core/src/types/webview-props.types.ts create mode 100644 workspaces/wi/wi-core/src/utils.ts create mode 100644 workspaces/wi/wi-core/tsconfig.json create mode 100644 workspaces/wi/wi-extension/.env.example create mode 100644 workspaces/wi/wi-extension/.gitignore create mode 100644 workspaces/wi/wi-extension/.vscode/launch.json create mode 100644 workspaces/wi/wi-extension/.vscode/settings.json create mode 100644 workspaces/wi/wi-extension/.vscode/tasks.json create mode 100644 workspaces/wi/wi-extension/.vscodeignore create mode 100644 workspaces/wi/wi-extension/CHANGELOG.md create mode 100644 workspaces/wi/wi-extension/LICENSE create mode 100644 workspaces/wi/wi-extension/README.md create mode 100644 workspaces/wi/wi-extension/biome.json create mode 100644 workspaces/wi/wi-extension/config/rush-project.json create mode 100644 workspaces/wi/wi-extension/package.json create mode 100644 workspaces/wi/wi-extension/resources/icons/integrator-icon.svg create mode 100644 workspaces/wi/wi-extension/resources/icons/wso2-integrator-logo.png create mode 100644 workspaces/wi/wi-extension/src/extension.ts create mode 100644 workspaces/wi/wi-extension/src/extensionAPIs.ts create mode 100644 workspaces/wi/wi-extension/src/extensionVariables.ts create mode 100644 workspaces/wi/wi-extension/src/rpc-managers/main/rpc-handler.ts create mode 100644 workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts create mode 100644 workspaces/wi/wi-extension/src/treeDataProvider.ts create mode 100644 workspaces/wi/wi-extension/src/webviewManager.ts create mode 100644 workspaces/wi/wi-extension/tsconfig.json create mode 100644 workspaces/wi/wi-extension/webpack.config.js create mode 100644 workspaces/wi/wi-rpc-client/config/rush-project.json create mode 100644 workspaces/wi/wi-rpc-client/eslint.config.cjs create mode 100644 workspaces/wi/wi-rpc-client/package.json create mode 100644 workspaces/wi/wi-rpc-client/src/RpcClient.ts create mode 100644 workspaces/wi/wi-rpc-client/src/index.ts create mode 100644 workspaces/wi/wi-rpc-client/src/rpc-clients/main/rpc-client.ts create mode 100644 workspaces/wi/wi-rpc-client/src/vscode.ts create mode 100644 workspaces/wi/wi-rpc-client/tsconfig.json create mode 100644 workspaces/wi/wi-webviews/biome.json create mode 100644 workspaces/wi/wi-webviews/config/rush-project.json create mode 100644 workspaces/wi/wi-webviews/package.json create mode 100644 workspaces/wi/wi-webviews/src/IntegratorWebview.tsx create mode 100644 workspaces/wi/wi-webviews/src/index.tsx create mode 100644 workspaces/wi/wi-webviews/src/style.css create mode 100644 workspaces/wi/wi-webviews/src/views/WelcomeView.css create mode 100644 workspaces/wi/wi-webviews/src/views/WelcomeView.tsx create mode 100644 workspaces/wi/wi-webviews/tsconfig.json create mode 100644 workspaces/wi/wi-webviews/webpack.config.js diff --git a/.vscode/launch.json b/.vscode/launch.json index 3c0397eee7a..4ddb4ffc33c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -234,6 +234,33 @@ ], "preLaunchTask": "watch-mi-tests" }, + { + "name": "WSO2 Integrator Extension", + "type": "extensionHost", + "request": "launch", + "env": { + "WEB_VIEW_DEV_MODE": "true", + "WEB_VIEW_DEV_HOST": "http://localhost:3000", + }, + "trace":true, + "debugWebviews": true, + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}/workspaces/wi/wi-extension" + ], + "outFiles": [ + "${workspaceFolder}/workspaces/wi/wi-extension/dist/**/*.js", + "${workspaceFolder}/workspaces/wi/wi-webviews/lib/**/*" + ], + "skipFiles": [ + "**/node_modules/**" + ], + "rendererDebugOptions": { + "sourceMaps": true, + "webRoot": "${workspaceFolder}/workspaces/wi/wi-webviews", + }, + "preLaunchTask": "npm: watch-wi", + "envFile": "${workspaceFolder}/workspaces/wi/wi-extension/.env" + }, { "name": "Ballerina Extension AI Tests", "type": "extensionHost", @@ -244,7 +271,8 @@ "--extensionTestsPath=${workspaceFolder}/workspaces/ballerina/ballerina-extension/out/test", "${workspaceFolder}/workspaces/ballerina/ballerina-extension/test/data/bi_empty_project", "${workspaceFolder}/workspaces/ballerina/ballerina-extension/test/data/bi_init", - "${workspaceFolder}/workspaces/ballerina/ballerina-extension/test/data/simple_order_management_system","${workspaceFolder}/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper" + "${workspaceFolder}/workspaces/ballerina/ballerina-extension/test/data/simple_order_management_system", + "${workspaceFolder}/workspaces/ballerina/ballerina-extension/test/data/ai_datamapper" ], "env": { "LS_EXTENSIONS_PATH": "", @@ -293,4 +321,4 @@ "preLaunchTask": "npm: watch-apk" }, ] -} +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index b769704d735..15e844620a4 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -208,6 +208,22 @@ "type": "npm", "script": "watch", "path": "workspaces/mi/mi-extension", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never", + "group": "watchers" + }, + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "label": "npm: watch-wi", + "type": "npm", + "script": "watch", + "path": "workspaces/wi/wi-extension", "problemMatcher": "$tsc-watch", "isBackground": true, "presentation": { diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index ba06a09b081..f02ae6dc33a 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -2892,7 +2892,7 @@ importers: version: 7.4.6(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) '@storybook/react-webpack5': specifier: ~7.4.0 - version: 7.4.6(@babel/core@7.27.7)(@swc/helpers@0.5.17)(@types/react-dom@18.2.0)(@types/react@18.2.0)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1) + version: 7.4.6(@babel/core@7.27.7)(@swc/helpers@0.5.17)(@types/react-dom@18.2.0)(@types/react@18.2.0)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1) '@types/react': specifier: 18.2.0 version: 18.2.0 @@ -4042,6 +4042,175 @@ importers: specifier: 5.8.3 version: 5.8.3 + ../../workspaces/wi/wi-core: + dependencies: + vscode-messenger-common: + specifier: ^0.5.1 + version: 0.5.1 + vscode-messenger-webview: + specifier: ^0.5.1 + version: 0.5.1 + devDependencies: + '@biomejs/biome': + specifier: ^1.9.4 + version: 1.9.4 + '@types/vscode': + specifier: ^1.100.0 + version: 1.102.0 + typescript: + specifier: 5.8.3 + version: 5.8.3 + + ../../workspaces/wi/wi-extension: + dependencies: + '@wso2/wi-core': + specifier: workspace:* + version: link:../wi-core + vscode-messenger: + specifier: ~0.5.1 + version: 0.5.1 + devDependencies: + '@biomejs/biome': + specifier: ^1.9.4 + version: 1.9.4 + '@types/node': + specifier: ^22.15.21 + version: 22.15.35 + '@types/vscode': + specifier: ^1.100.0 + version: 1.102.0 + '@vscode/vsce': + specifier: ^3.2.1 + version: 3.4.2 + '@wso2/wi-webviews': + specifier: workspace:* + version: link:../wi-webviews + ts-loader: + specifier: ^9.5.1 + version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + typescript: + specifier: 5.8.3 + version: 5.8.3 + webpack: + specifier: ^5.94.0 + version: 5.101.0(webpack-cli@6.0.1) + webpack-cli: + specifier: ^6.0.1 + version: 6.0.1(webpack@5.101.0) + + ../../workspaces/wi/wi-rpc-client: + dependencies: + '@types/vscode-webview': + specifier: ^1.57.5 + version: 1.57.5 + '@wso2/wi-core': + specifier: workspace:* + version: link:../wi-core + react: + specifier: 19.1.0 + version: 19.1.0 + react-dom: + specifier: 19.1.0 + version: 19.1.0(react@19.1.0) + vscode-messenger-common: + specifier: ^0.5.1 + version: 0.5.1 + vscode-messenger-webview: + specifier: ^0.5.1 + version: 0.5.1 + devDependencies: + '@types/react': + specifier: 18.2.0 + version: 18.2.0 + '@types/react-dom': + specifier: 18.2.0 + version: 18.2.0 + '@typescript-eslint/eslint-plugin': + specifier: ^8.32.1 + version: 8.33.1(@typescript-eslint/parser@8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3))(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + '@typescript-eslint/parser': + specifier: ^8.32.1 + version: 8.33.1(eslint@9.27.0(jiti@2.5.1))(typescript@5.8.3) + eslint: + specifier: ^9.27.0 + version: 9.27.0(jiti@2.5.1) + typescript: + specifier: 5.8.3 + version: 5.8.3 + + ../../workspaces/wi/wi-webviews: + dependencies: + '@pmmmwh/react-refresh-webpack-plugin': + specifier: ~0.6.1 + version: 0.6.1(@types/webpack@5.28.5(webpack-cli@6.0.1))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.101.0) + '@vscode/webview-ui-toolkit': + specifier: ^1.4.0 + version: 1.4.0(react@18.2.0) + '@wso2/wi-core': + specifier: workspace:* + version: link:../wi-core + '@wso2/wi-rpc-client': + specifier: workspace:* + version: link:../wi-rpc-client + classnames: + specifier: ~2.5.1 + version: 2.5.1 + react: + specifier: 18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + vscode-messenger-common: + specifier: ^0.5.1 + version: 0.5.1 + vscode-messenger-webview: + specifier: ^0.5.1 + version: 0.5.1 + devDependencies: + '@biomejs/biome': + specifier: ^1.9.4 + version: 1.9.4 + '@types/node': + specifier: ^22.15.21 + version: 22.15.35 + '@types/react': + specifier: 18.2.0 + version: 18.2.0 + '@types/react-dom': + specifier: 18.2.0 + version: 18.2.0 + copyfiles: + specifier: ~2.4.1 + version: 2.4.1 + css-loader: + specifier: ^7.1.2 + version: 7.1.2(webpack@5.101.0) + react-hot-loader: + specifier: ~4.13.1 + version: 4.13.1(@types/react@18.2.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + source-map-loader: + specifier: ~5.0.0 + version: 5.0.0(webpack@5.101.0) + style-loader: + specifier: ^4.0.0 + version: 4.0.0(webpack@5.101.0) + ts-loader: + specifier: ^9.5.1 + version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) + typescript: + specifier: 5.8.3 + version: 5.8.3 + webpack: + specifier: ^5.94.0 + version: 5.101.0(webpack-cli@6.0.1) + webpack-cli: + specifier: ^6.0.1 + version: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.101.0) + webpack-dev-server: + specifier: ^5.2.1 + version: 5.2.2(webpack-cli@6.0.1)(webpack@5.101.0) + ../../workspaces/wso2-platform/wso2-platform-core: dependencies: vscode-messenger-common: @@ -26144,6 +26313,22 @@ snapshots: webpack-dev-server: 5.2.2(webpack-cli@5.1.4)(webpack@5.101.0) webpack-hot-middleware: 2.26.1 + '@pmmmwh/react-refresh-webpack-plugin@0.6.1(@types/webpack@5.28.5(webpack-cli@6.0.1))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.101.0)': + dependencies: + anser: 2.3.2 + core-js-pure: 3.45.0 + error-stack-parser: 2.1.4 + html-entities: 2.6.0 + react-refresh: 0.11.0 + schema-utils: 4.3.2 + source-map: 0.7.6 + webpack: 5.101.0(webpack-cli@6.0.1) + optionalDependencies: + '@types/webpack': 5.28.5(webpack-cli@6.0.1) + type-fest: 4.41.0 + webpack-dev-server: 5.2.2(webpack-cli@6.0.1)(webpack@5.101.0) + webpack-hot-middleware: 2.26.1 + '@projectstorm/geometry@6.7.4': {} '@projectstorm/geometry@7.0.3': @@ -29757,30 +29942,30 @@ snapshots: '@swc/core': 1.13.3(@swc/helpers@0.5.17) '@types/node': 16.18.126 '@types/semver': 7.7.0 - babel-loader: 9.2.1(@babel/core@7.27.7)(webpack@5.101.0) + babel-loader: 9.2.1(@babel/core@7.27.7)(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))) babel-plugin-named-exports-order: 0.0.2 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.101.0) + css-loader: 6.11.0(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))) express: 4.21.2 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.101.0) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.3)(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))) fs-extra: 11.3.1 - html-webpack-plugin: 5.6.3(webpack@5.101.0) + html-webpack-plugin: 5.6.3(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))) path-browserify: 1.0.1 process: 0.11.10 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) semver: 7.7.2 - style-loader: 3.3.4(webpack@5.101.0) - swc-loader: 0.2.6(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack@5.101.0) - terser-webpack-plugin: 5.3.14(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack@5.101.0) + style-loader: 3.3.4(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))) + swc-loader: 0.2.6(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))) + terser-webpack-plugin: 5.3.14(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4) - webpack-dev-middleware: 6.1.3(webpack@5.101.0) + webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17)) + webpack-dev-middleware: 6.1.3(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.5.0 optionalDependencies: @@ -31761,7 +31946,7 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@7.4.6(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1)': + '@storybook/preset-react-webpack@7.4.6(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)': dependencies: '@babel/preset-flow': 7.27.1(@babel/core@7.27.7) '@babel/preset-react': 7.27.1(@babel/core@7.27.7) @@ -32066,10 +32251,10 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/react-webpack5@7.4.6(@babel/core@7.27.7)(@swc/helpers@0.5.17)(@types/react-dom@18.2.0)(@types/react@18.2.0)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1)': + '@storybook/react-webpack5@7.4.6(@babel/core@7.27.7)(@swc/helpers@0.5.17)(@types/react-dom@18.2.0)(@types/react@18.2.0)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1)': dependencies: '@storybook/builder-webpack5': 7.4.6(@swc/helpers@0.5.17)(@types/react-dom@18.2.0)(@types/react@18.2.0)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - '@storybook/preset-react-webpack': 7.4.6(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-dev-server@5.2.2(webpack@5.101.0))(webpack-hot-middleware@2.26.1) + '@storybook/preset-react-webpack': 7.4.6(@babel/core@7.27.7)(@types/webpack@5.28.5)(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(type-fest@4.41.0)(typescript@5.8.3)(webpack-hot-middleware@2.26.1) '@storybook/react': 7.4.6(encoding@0.1.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) '@types/node': 16.18.126 react: 19.1.0 @@ -35914,6 +36099,13 @@ snapshots: schema-utils: 2.7.1 webpack: 5.101.0(webpack-cli@6.0.1) + babel-loader@9.2.1(@babel/core@7.27.7)(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))): + dependencies: + '@babel/core': 7.27.7 + find-cache-dir: 4.0.0 + schema-utils: 4.3.2 + webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17)) + babel-loader@9.2.1(@babel/core@7.27.7)(webpack@5.101.0): dependencies: '@babel/core': 7.27.7 @@ -37680,6 +37872,19 @@ snapshots: semver: 7.7.2 webpack: 5.101.0(webpack-cli@5.1.4) + css-loader@6.11.0(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))): + dependencies: + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) + postcss-modules-scope: 3.2.1(postcss@8.5.6) + postcss-modules-values: 4.0.0(postcss@8.5.6) + postcss-value-parser: 4.2.0 + semver: 7.7.2 + optionalDependencies: + webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17)) + css-loader@6.11.0(webpack@5.101.0): dependencies: icss-utils: 5.1.0(postcss@8.5.6) @@ -39827,6 +40032,23 @@ snapshots: optionalDependencies: eslint: 9.27.0(jiti@2.5.1) + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))): + dependencies: + '@babel/code-frame': 7.27.1 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 7.1.0 + deepmerge: 4.3.1 + fs-extra: 10.1.0 + memfs: 3.5.3 + minimatch: 3.1.2 + node-abort-controller: 3.1.1 + schema-utils: 3.3.0 + semver: 7.7.2 + tapable: 2.2.2 + typescript: 5.8.3 + webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17)) + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.3)(webpack@5.101.0): dependencies: '@babel/code-frame': 7.27.1 @@ -40784,6 +41006,16 @@ snapshots: util.promisify: 1.0.0 webpack: 5.101.0(webpack-cli@6.0.1) + html-webpack-plugin@5.6.3(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))): + dependencies: + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.17.21 + pretty-error: 4.0.0 + tapable: 2.2.2 + optionalDependencies: + webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17)) + html-webpack-plugin@5.6.3(webpack@5.101.0): dependencies: '@types/html-minifier-terser': 6.1.0 @@ -48399,6 +48631,10 @@ snapshots: schema-utils: 3.3.0 webpack: 5.101.0(webpack-cli@6.0.1) + style-loader@3.3.4(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))): + dependencies: + webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17)) + style-loader@3.3.4(webpack@5.101.0): dependencies: webpack: 5.101.0(webpack-cli@5.1.4) @@ -48738,6 +48974,12 @@ snapshots: - '@types/react' - debug + swc-loader@0.2.6(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))): + dependencies: + '@swc/core': 1.13.3(@swc/helpers@0.5.17) + '@swc/counter': 0.1.3 + webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17)) + swc-loader@0.2.6(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack@5.101.0): dependencies: '@swc/core': 1.13.3(@swc/helpers@0.5.17) @@ -48913,6 +49155,17 @@ snapshots: webpack: 5.101.0(webpack-cli@6.0.1) webpack-sources: 1.4.3 + terser-webpack-plugin@5.3.14(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))): + dependencies: + '@jridgewell/trace-mapping': 0.3.29 + jest-worker: 27.5.1 + schema-utils: 4.3.2 + serialize-javascript: 6.0.2 + terser: 5.43.1 + webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17)) + optionalDependencies: + '@swc/core': 1.13.3(@swc/helpers@0.5.17) + terser-webpack-plugin@5.3.14(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack@5.101.0): dependencies: '@jridgewell/trace-mapping': 0.3.29 @@ -50489,6 +50742,16 @@ snapshots: schema-utils: 3.3.0 webpack: 5.101.0(webpack-cli@6.0.1) + webpack-dev-middleware@6.1.3(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))): + dependencies: + colorette: 2.0.20 + memfs: 3.5.3 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.3.2 + optionalDependencies: + webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17)) + webpack-dev-middleware@6.1.3(webpack@5.101.0): dependencies: colorette: 2.0.20 @@ -50727,6 +50990,38 @@ snapshots: webpack-virtual-modules@0.6.2: {} + webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17)): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.15.0 + acorn-import-phases: 1.0.4(acorn@8.15.0) + browserslist: 4.25.1 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.3 + es-module-lexer: 1.7.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.2 + tapable: 2.2.2 + terser-webpack-plugin: 5.3.14(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))) + watchpack: 2.4.4 + webpack-sources: 3.3.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4): dependencies: '@types/eslint-scope': 3.7.7 diff --git a/rush.json b/rush.json index 10d142e9c99..afadb753710 100644 --- a/rush.json +++ b/rush.json @@ -607,6 +607,22 @@ "packageName": "api-designer", "projectFolder": "workspaces/api-designer/api-designer-extension", "versionPolicyName": "api-designer-extension" + }, + { + "packageName": "@wso2/wi-core", + "projectFolder": "workspaces/wi/wi-core" + }, + { + "packageName": "wso2-integrator", + "projectFolder": "workspaces/wi/wi-extension" + }, + { + "packageName": "@wso2/wi-webviews", + "projectFolder": "workspaces/wi/wi-webviews" + }, + { + "packageName": "@wso2/wi-rpc-client", + "projectFolder": "workspaces/wi/wi-rpc-client" } ] } diff --git a/workspaces/ballerina/ballerina-extension/package.json b/workspaces/ballerina/ballerina-extension/package.json index 67f96e0726e..146a0523be9 100644 --- a/workspaces/ballerina/ballerina-extension/package.json +++ b/workspaces/ballerina/ballerina-extension/package.json @@ -966,21 +966,21 @@ "description": "design-view", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", - "fontCharacter": "\\f182" + "fontCharacter": "\\f184" } }, "distro-start": { "description": "start", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", - "fontCharacter": "\\f1f7" + "fontCharacter": "\\f1f9" } }, "distro-debug": { "description": "debug", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", - "fontCharacter": "\\f17d" + "fontCharacter": "\\f17f" } }, "distro-source-view": { @@ -994,7 +994,7 @@ "description": "persist-diagram", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", - "fontCharacter": "\\f1d2" + "fontCharacter": "\\f1d4" } }, "distro-cached-rounded": { diff --git a/workspaces/choreo/choreo-extension/package.json b/workspaces/choreo/choreo-extension/package.json index 122bdbcae0e..a102e96fb17 100644 --- a/workspaces/choreo/choreo-extension/package.json +++ b/workspaces/choreo/choreo-extension/package.json @@ -158,7 +158,7 @@ "description": "choreo-2", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", - "fontCharacter": "\\f168" + "fontCharacter": "\\f16a" } } } diff --git a/workspaces/common-libs/rpc-generator/index.js b/workspaces/common-libs/rpc-generator/index.js index e273ab6cf5f..a2c4bed7d6e 100644 --- a/workspaces/common-libs/rpc-generator/index.js +++ b/workspaces/common-libs/rpc-generator/index.js @@ -324,7 +324,6 @@ const handlerFunction = handlerSourceFile.addFunction({ }] }); handleImportStatment(handlerSourceFile, 'vscode-messenger', 'Messenger'); - // Add statements to the function const managerObject = `const rpcManger = new ${managerClassName}();` handlerFunction.addStatements(managerObject); @@ -332,6 +331,7 @@ typeMethods.forEach(value => { handleMessengerTypes(handlerFunction, value, handlerSourceFile); }) +console.log(`Adding handler function: ${headerComment}...`); handleImportStatment(handlerSourceFile, './rpc-manager', managerClassName); // Format imports into new lines diff --git a/workspaces/common-libs/rpc-generator/package.json b/workspaces/common-libs/rpc-generator/package.json index 6e2766b61dc..e4f03d514c3 100644 --- a/workspaces/common-libs/rpc-generator/package.json +++ b/workspaces/common-libs/rpc-generator/package.json @@ -4,11 +4,11 @@ "description": "Generate rpc-manager,rpc-handler and rpc-client ts files in relevant libraries", "main": "index.js", "config": { - "CORE_RPC_TYPE_FILE": "ai-panel/index.ts", - "CORE_RPC_TYPE_DIR": "../../ballerina/ballerina-core/", - "EXT_RPC_MANAGER_DIR": "../../ballerina/ballerina-extension/", - "RPC_CLIENT_DIR": "../../ballerina/ballerina-rpc-client/", - "CORE_MODULE_NAME": "@wso2/ballerina-core" + "CORE_RPC_TYPE_FILE": "main/index.ts", + "CORE_RPC_TYPE_DIR": "../../wi/wi-core/", + "EXT_RPC_MANAGER_DIR": "../../wi/wi-extension/", + "RPC_CLIENT_DIR": "../../wi/wi-rpc-client/", + "CORE_MODULE_NAME": "@wso2/wi-core" }, "scripts": { "generate": "node index.js" diff --git a/workspaces/mi/mi-extension/package.json b/workspaces/mi/mi-extension/package.json index 604472291c1..b52540394ae 100644 --- a/workspaces/mi/mi-extension/package.json +++ b/workspaces/mi/mi-extension/package.json @@ -932,14 +932,14 @@ "description": "design-view", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", - "fontCharacter": "\\f182" + "fontCharacter": "\\f184" } }, "distro-build-package": { "description": "build-package", "default": { "fontPath": "./resources/font-wso2-vscode/dist/wso2-vscode.woff", - "fontCharacter": "\\f15d" + "fontCharacter": "\\f15f" } } } diff --git a/workspaces/wi/wi-core/biome.json b/workspaces/wi/wi-core/biome.json new file mode 100644 index 00000000000..bcec3347ac9 --- /dev/null +++ b/workspaces/wi/wi-core/biome.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "ignore": [] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab" + }, + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": false + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + } +} diff --git a/workspaces/wi/wi-core/config/rush-project.json b/workspaces/wi/wi-core/config/rush-project.json new file mode 100644 index 00000000000..3c3241c8f6a --- /dev/null +++ b/workspaces/wi/wi-core/config/rush-project.json @@ -0,0 +1,3 @@ +{ + "extends": "../../../rush-config.json" +} diff --git a/workspaces/wi/wi-core/package.json b/workspaces/wi/wi-core/package.json new file mode 100644 index 00000000000..a6663488c78 --- /dev/null +++ b/workspaces/wi/wi-core/package.json @@ -0,0 +1,29 @@ +{ + "name": "@wso2/wi-core", + "version": "1.0.0", + "description": "Contains models and types for WSO2 Integrator Extension", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "scripts": { + "lint": "biome check .", + "lint:fix": "biome check --write .", + "build": "tsc --pretty", + "watch": "tsc --pretty --watch", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "WSO2", + "license": "Apache-2.0", + "devDependencies": { + "typescript": "5.8.3", + "@biomejs/biome": "^1.9.4", + "@types/vscode": "^1.100.0" + }, + "dependencies": { + "vscode-messenger-common": "^0.5.1", + "vscode-messenger-webview": "^0.5.1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/wso2/ballerina-plugin-vscode.git" + } +} diff --git a/workspaces/wi/wi-core/src/constants.ts b/workspaces/wi/wi-core/src/constants.ts new file mode 100644 index 00000000000..cf54bcbf003 --- /dev/null +++ b/workspaces/wi/wi-core/src/constants.ts @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Extension constants + */ +export const EXTENSION_ID = "wso2-integrator"; +export const EXTENSION_NAME = "WSO2 Integrator"; +export const EXTENSION_PUBLISHER = "wso2"; + +/** + * Command constants + */ +export const COMMANDS = { + OPEN_WELCOME: "wso2.integrator.openWelcome", + REFRESH_VIEW: "wso2.integrator.refreshView", + OPEN_BI_INTEGRATION: "wso2.integrator.openBIIntegration", + OPEN_MI_INTEGRATION: "wso2.integrator.openMIIntegration", +}; + +/** + * View constants + */ +export const VIEWS = { + INTEGRATOR_EXPLORER: "wso2-integrator.explorer", +}; + +/** + * Context keys + */ +export const CONTEXT_KEYS = { + BI_AVAILABLE: "wso2-integrator.bi.available", + MI_AVAILABLE: "wso2-integrator.mi.available", +}; + +/** + * Extension dependencies + */ +export const EXTENSION_DEPENDENCIES = { + BI: "wso2.ballerina-integrator", + MI: "wso2.micro-integrator", +}; diff --git a/workspaces/wi/wi-core/src/enums.ts b/workspaces/wi/wi-core/src/enums.ts new file mode 100644 index 00000000000..91e939125ae --- /dev/null +++ b/workspaces/wi/wi-core/src/enums.ts @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Integration type enumeration + */ +export enum IntegrationType { + BI = "BI", + MI = "MI", +} + +/** + * View types for webviews + */ +export enum ViewType { + WELCOME = "welcome", + COMPONENT_LIST = "componentList", +} + +/** + * Extension status enumeration + */ +export enum ExtensionStatus { + UNKNOWN_PROJECT = "unknownProject", + LOADING = "loading", + READY = "ready", + NO_LS = "noLS", + UPDATE_NEEDED = "updateNeed", +} diff --git a/workspaces/wi/wi-core/src/index.ts b/workspaces/wi/wi-core/src/index.ts new file mode 100644 index 00000000000..522a21833cc --- /dev/null +++ b/workspaces/wi/wi-core/src/index.ts @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export * from "./constants"; +export * from "./enums"; +export * from "./utils"; +export * from "./types"; +export * from "./rpc-types/main"; diff --git a/workspaces/wi/wi-core/src/rpc-types/main/index.ts b/workspaces/wi/wi-core/src/rpc-types/main/index.ts new file mode 100644 index 00000000000..0c7c1fc6a10 --- /dev/null +++ b/workspaces/wi/wi-core/src/rpc-types/main/index.ts @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { RunCommandRequest, RunCommandResponse } from "../../types/rpc.types"; + +export * from "./rpc-type"; +export * from "../../types/rpc.types"; + +export interface WIVisualizerAPI { + openBiExtension: () => void; + openMiExtension: () => void; + runCommand: (params: RunCommandRequest) => Promise; +} diff --git a/workspaces/wi/wi-core/src/rpc-types/main/rpc-type.ts b/workspaces/wi/wi-core/src/rpc-types/main/rpc-type.ts new file mode 100644 index 00000000000..da379a1cc16 --- /dev/null +++ b/workspaces/wi/wi-core/src/rpc-types/main/rpc-type.ts @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * THIS FILE INCLUDES AUTO GENERATED CODE + */ +import { RunCommandRequest, RunCommandResponse } from "../../types/rpc.types"; +import { NotificationType, RequestType } from "vscode-messenger-common"; + +const _preFix = "main"; +export const openBiExtension: NotificationType = { method: `${_preFix}/openBiExtension` }; +export const openMiExtension: NotificationType = { method: `${_preFix}/openMiExtension` }; +export const runCommand: RequestType = { method: `${_preFix}/runCommand` }; diff --git a/workspaces/wi/wi-core/src/types/common.types.ts b/workspaces/wi/wi-core/src/types/common.types.ts new file mode 100644 index 00000000000..eddf8b01963 --- /dev/null +++ b/workspaces/wi/wi-core/src/types/common.types.ts @@ -0,0 +1,63 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import type { IntegrationType } from "../enums"; + +/** + * Tree item data interface + */ +export interface TreeItemData { + id: string; + label: string; + description?: string; + tooltip?: string; + contextValue?: string; + iconPath?: string; + collapsibleState?: number; + command?: { + command: string; + title: string; + arguments?: unknown[]; + }; +} + +/** + * Integration item interface + */ +export interface IntegrationItem { + type: IntegrationType; + label: string; + description: string; + items: TreeItemData[]; +} + +/** + * Extension API interface for BI extension + */ +export interface BIExtensionAPI { + getProjectExplorerItems(): Promise; + getStatus(): string; +} + +/** + * Extension API interface for MI extension + */ +export interface MIExtensionAPI { + getProjectExplorerItems(): Promise; + getStatus(): string; +} diff --git a/workspaces/wi/wi-core/src/types/index.ts b/workspaces/wi/wi-core/src/types/index.ts new file mode 100644 index 00000000000..55818fec4e4 --- /dev/null +++ b/workspaces/wi/wi-core/src/types/index.ts @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export * from "./webview-props.types"; +export * from "./common.types"; diff --git a/workspaces/wi/wi-core/src/types/rpc.types.ts b/workspaces/wi/wi-core/src/types/rpc.types.ts new file mode 100644 index 00000000000..738b45a71aa --- /dev/null +++ b/workspaces/wi/wi-core/src/types/rpc.types.ts @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export interface RunCommandRequest { + command: string; + args?: any[]; +} + +export interface RunCommandResponse { + success: boolean; + result?: any; + error?: string; +} diff --git a/workspaces/wi/wi-core/src/types/webview-props.types.ts b/workspaces/wi/wi-core/src/types/webview-props.types.ts new file mode 100644 index 00000000000..d468902d3c0 --- /dev/null +++ b/workspaces/wi/wi-core/src/types/webview-props.types.ts @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import type { IntegrationType, ViewType } from "../enums"; + +/** + * Base webview properties + */ +export interface BaseWebviewProps { + type: ViewType; +} + +/** + * Welcome view properties + */ +export interface WelcomeWebviewProps extends BaseWebviewProps { + type: ViewType.WELCOME; + biAvailable: boolean; + miAvailable: boolean; +} + +/** + * Component list view properties + */ +export interface ComponentListWebviewProps extends BaseWebviewProps { + type: ViewType.COMPONENT_LIST; + integrationType: IntegrationType; +} + +/** + * Union type for all webview props + */ +export type WebviewProps = WelcomeWebviewProps | ComponentListWebviewProps; diff --git a/workspaces/wi/wi-core/src/utils.ts b/workspaces/wi/wi-core/src/utils.ts new file mode 100644 index 00000000000..efe1274f65c --- /dev/null +++ b/workspaces/wi/wi-core/src/utils.ts @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Utility functions for WSO2 Integrator Core + */ + +/** + * Check if a value is defined and not null + */ +export function isDefined(value: T | undefined | null): value is T { + return value !== undefined && value !== null; +} + +/** + * Safely get a property from an object + */ +export function getProperty(obj: T, key: K): T[K] | undefined { + return obj?.[key]; +} + +/** + * Format error message + */ +export function formatError(error: unknown): string { + if (error instanceof Error) { + return error.message; + } + return String(error); +} diff --git a/workspaces/wi/wi-core/tsconfig.json b/workspaces/wi/wi-core/tsconfig.json new file mode 100644 index 00000000000..7ccd6b4b0b4 --- /dev/null +++ b/workspaces/wi/wi-core/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "commonjs", + "lib": ["ES2020"], + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "outDir": "./lib", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "node", + "resolveJsonModule": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "lib"] +} diff --git a/workspaces/wi/wi-extension/.env.example b/workspaces/wi/wi-extension/.env.example new file mode 100644 index 00000000000..0f97586f1f4 --- /dev/null +++ b/workspaces/wi/wi-extension/.env.example @@ -0,0 +1,15 @@ +# Environment Configuration (optional) +# Copy this file to .env and configure as needed + +# Extension Development +# Set to 'development' for verbose logging +NODE_ENV=production + +# Feature Flags +# Enable experimental features +ENABLE_EXPERIMENTAL_FEATURES=false + +# Webview Development +# Use local webview server for hot reload (development only) +USE_LOCAL_WEBVIEW=false +WEBVIEW_DEV_SERVER=http://localhost:3000 diff --git a/workspaces/wi/wi-extension/.gitignore b/workspaces/wi/wi-extension/.gitignore new file mode 100644 index 00000000000..0f42b8afab8 --- /dev/null +++ b/workspaces/wi/wi-extension/.gitignore @@ -0,0 +1,5 @@ +node_modules +out +dist +*.vsix +.vscode-test diff --git a/workspaces/wi/wi-extension/.vscode/launch.json b/workspaces/wi/wi-extension/.vscode/launch.json new file mode 100644 index 00000000000..5c9fcdf5197 --- /dev/null +++ b/workspaces/wi/wi-extension/.vscode/launch.json @@ -0,0 +1,30 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}/workspaces/wi/wi-extension" + ], + "outFiles": [ + "${workspaceFolder}/workspaces/wi/wi-extension/dist/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}/workspaces/wi/wi-extension", + "--extensionTestsPath=${workspaceFolder}/workspaces/wi/wi-extension/out/test/suite/index" + ], + "outFiles": [ + "${workspaceFolder}/workspaces/wi/wi-extension/out/test/**/*.js" + ], + "preLaunchTask": "npm: compile-tests" + } + ] +} diff --git a/workspaces/wi/wi-extension/.vscode/settings.json b/workspaces/wi/wi-extension/.vscode/settings.json new file mode 100644 index 00000000000..b2fbfdb5efb --- /dev/null +++ b/workspaces/wi/wi-extension/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "editor.formatOnSave": true, + "editor.defaultFormatter": "biomejs.biome", + "typescript.tsdk": "node_modules/typescript/lib" +} diff --git a/workspaces/wi/wi-extension/.vscode/tasks.json b/workspaces/wi/wi-extension/.vscode/tasks.json new file mode 100644 index 00000000000..418deff6b37 --- /dev/null +++ b/workspaces/wi/wi-extension/.vscode/tasks.json @@ -0,0 +1,36 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "path": "workspaces/wi/wi-extension", + "isBackground": true, + "group": { + "kind": "build", + "isDefault": true + }, + "problemMatcher": [ + "$ts-webpack-watch" + ] + }, + { + "type": "npm", + "script": "compile", + "path": "workspaces/wi/wi-extension", + "group": "build", + "problemMatcher": [ + "$tsc" + ] + }, + { + "type": "npm", + "script": "compile-tests", + "path": "workspaces/wi/wi-extension", + "group": "build", + "problemMatcher": [ + "$tsc" + ] + } + ] +} diff --git a/workspaces/wi/wi-extension/.vscodeignore b/workspaces/wi/wi-extension/.vscodeignore new file mode 100644 index 00000000000..cbdb9611d16 --- /dev/null +++ b/workspaces/wi/wi-extension/.vscodeignore @@ -0,0 +1 @@ +!dist diff --git a/workspaces/wi/wi-extension/CHANGELOG.md b/workspaces/wi/wi-extension/CHANGELOG.md new file mode 100644 index 00000000000..d0e2e03f406 --- /dev/null +++ b/workspaces/wi/wi-extension/CHANGELOG.md @@ -0,0 +1,14 @@ +# Changelog + +All notable changes to the "wso2-integrator" extension will be documented in this file. + +## [1.0.0] - 2025-10-21 + +### Added +- Initial release of WSO2 Integrator extension +- Unified sidebar activity bar for BI and MI integrations +- Welcome page with integration status and quick links +- Extension bridge to consume BI and MI extension APIs +- Tree data provider for integration project exploration +- Commands for navigating between BI and MI views +- Automatic detection of installed BI/MI extensions diff --git a/workspaces/wi/wi-extension/LICENSE b/workspaces/wi/wi-extension/LICENSE new file mode 100644 index 00000000000..cde30403f90 --- /dev/null +++ b/workspaces/wi/wi-extension/LICENSE @@ -0,0 +1,60 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all +other entities that control, are controlled by, or are under common +control with that entity. For the purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the +direction or management of such entity, whether by contract or +otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation +source, and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or +Object form, made available under the License, as indicated by a +copyright notice that is included in or attached to the work +(an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object +form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain +separable from, or merely link (or bind by name) to the interfaces of, +the Work and Derivative Works thereof. + +Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/workspaces/wi/wi-extension/README.md b/workspaces/wi/wi-extension/README.md new file mode 100644 index 00000000000..5811ba1b766 --- /dev/null +++ b/workspaces/wi/wi-extension/README.md @@ -0,0 +1,82 @@ +# WSO2 Integrator Extension + +A unified Visual Studio Code extension for developing WSO2 integration solutions, providing a single activity bar view for both Ballerina Integrator (BI) and Micro Integrator (MI) projects. + +## Features + +- **Unified Integration View**: Access both BI and MI integrations from a single sidebar activity +- **Welcome Dashboard**: Interactive welcome page showing available integration types +- **Seamless Integration**: Works alongside existing BI and MI extensions +- **Quick Navigation**: Easy access to BI and MI project explorer items +- **Extension Bridge**: Automatically detects and integrates with installed BI/MI extensions + +## Requirements + +This extension provides a unified interface for: +- **WSO2 Integrator: BI** (`wso2.ballerina-integrator`) +- **WSO2 Integrator: MI** (`wso2.micro-integrator`) + +Install one or both of these extensions to enable their respective functionality. + +## Installation + +1. Install the WSO2 Integrator extension from the VS Code marketplace +2. Install WSO2 Integrator: BI and/or WSO2 Integrator: MI extensions +3. Open the WSO2 Integrator activity bar icon to get started + +## Usage + +### Welcome Page + +Click on the home icon in the WSO2 Integrator sidebar to open the welcome page, which provides: +- Status of installed BI/MI extensions +- Quick links to open BI or MI integrations +- Documentation and resource links + +### Integration Explorer + +The integration explorer shows: +- Ballerina Integrator (BI) projects (if extension is installed) +- Micro Integrator (MI) projects (if extension is installed) +- Tree view items from respective extensions + +### Commands + +- **WSO2 Integrator: Open Welcome Page** - Open the welcome dashboard +- **WSO2 Integrator: Refresh** - Refresh the integration explorer +- **WSO2 Integrator: Open BI Integration** - Switch to BI extension view +- **WSO2 Integrator: Open MI Integration** - Switch to MI extension view + +## Extension Settings + +This extension works with the settings of the underlying BI and MI extensions. + +## Known Issues + +None at this time. + +## Release Notes + +### 1.0.0 + +Initial release of WSO2 Integrator extension with: +- Unified sidebar view for BI and MI integrations +- Welcome page with integration status +- Extension bridge for BI and MI extensions +- Tree data provider for project exploration + +## Contributing + +We welcome contributions! Please see our [contributing guidelines](CONTRIBUTING.md) for more information. + +## License + +Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) + +Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for details. + +## Support + +- [Documentation](https://wso2.com/integration/) +- [GitHub Issues](https://github.com/wso2/ballerina-plugin-vscode/issues) +- [Community Discord](https://discord.gg/wso2) diff --git a/workspaces/wi/wi-extension/biome.json b/workspaces/wi/wi-extension/biome.json new file mode 100644 index 00000000000..bcec3347ac9 --- /dev/null +++ b/workspaces/wi/wi-extension/biome.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "ignore": [] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab" + }, + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": false + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + } +} diff --git a/workspaces/wi/wi-extension/config/rush-project.json b/workspaces/wi/wi-extension/config/rush-project.json new file mode 100644 index 00000000000..3c3241c8f6a --- /dev/null +++ b/workspaces/wi/wi-extension/config/rush-project.json @@ -0,0 +1,3 @@ +{ + "extends": "../../../rush-config.json" +} diff --git a/workspaces/wi/wi-extension/package.json b/workspaces/wi/wi-extension/package.json new file mode 100644 index 00000000000..8b402536f00 --- /dev/null +++ b/workspaces/wi/wi-extension/package.json @@ -0,0 +1,113 @@ +{ + "name": "wso2-integrator", + "displayName": "WSO2 Integrator", + "description": "Unified integration development environment for WSO2 BI and MI in VS Code", + "version": "1.0.0", + "publisher": "wso2", + "icon": "resources/icons/wso2-integrator-logo.png", + "license": "Apache-2.0", + "repository": { + "url": "https://github.com/wso2/ballerina-plugin-vscode" + }, + "engines": { + "vscode": "^1.100.0" + }, + "categories": [ + "Other" + ], + "activationEvents": [ + "onStartupFinished" + ], + "extensionDependencies": [], + "main": "./dist/extension.js", + "contributes": { + "viewsContainers": { + "activitybar": [ + { + "id": "wso2-integrator", + "title": "WSO2 Integrator", + "icon": "resources/icons/integrator-icon.svg" + } + ] + }, + "views": { + "wso2-integrator": [ + { + "id": "wso2-integrator.explorer", + "name": "Integrations", + "contextualTitle": "WSO2 Integrator" + } + ] + }, + "viewsWelcome": [ + { + "view": "wso2-integrator.explorer", + "contents": "Welcome to WSO2 Integrator! This extension provides a unified development environment for BI and MI integrations.\n[Open Welcome Page](command:wso2.integrator.openWelcome)\nTo learn more about WSO2 Integrator [read our docs](https://wso2.com/integration)." + } + ], + "commands": [ + { + "command": "wso2.integrator.openWelcome", + "title": "Open Welcome Page", + "category": "WSO2 Integrator", + "icon": "$(home)" + }, + { + "command": "wso2.integrator.refreshView", + "title": "Refresh", + "category": "WSO2 Integrator", + "icon": "$(refresh)" + }, + { + "command": "wso2.integrator.openBIIntegration", + "title": "Open BI Integration", + "category": "WSO2 Integrator" + }, + { + "command": "wso2.integrator.openMIIntegration", + "title": "Open MI Integration", + "category": "WSO2 Integrator" + } + ], + "menus": { + "view/title": [ + { + "command": "wso2.integrator.openWelcome", + "when": "view == wso2-integrator.explorer", + "group": "navigation@1" + }, + { + "command": "wso2.integrator.refreshView", + "when": "view == wso2-integrator.explorer", + "group": "navigation@2" + } + ] + } + }, + "scripts": { + "lint": "biome check .", + "lint:fix": "biome check --write .", + "vscode:prepublish": "npm run build", + "build": "webpack --mode production", + "watch": "tsc -p . -w", + "compile": "tsc -p ./", + "compile-tests": "tsc -p . --outDir out", + "test": "node ./out/test/runTest.js", + "package": "vsce package" + }, + "devDependencies": { + "@biomejs/biome": "^1.9.4", + "@types/node": "^22.15.21", + "@types/vscode": "^1.100.0", + "ts-loader": "^9.5.1", + "typescript": "5.8.3", + "webpack": "^5.97.1", + "webpack-cli": "^6.0.1", + "@vscode/vsce": "^3.2.1", + "@wso2/wi-webviews": "workspace:*" + }, + "dependencies": { + "@wso2/wi-core": "workspace:*", + "vscode-messenger": "~0.5.1" + } +} diff --git a/workspaces/wi/wi-extension/resources/icons/integrator-icon.svg b/workspaces/wi/wi-extension/resources/icons/integrator-icon.svg new file mode 100644 index 00000000000..c3c20999432 --- /dev/null +++ b/workspaces/wi/wi-extension/resources/icons/integrator-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/resources/icons/wso2-integrator-logo.png b/workspaces/wi/wi-extension/resources/icons/wso2-integrator-logo.png new file mode 100644 index 00000000000..3c275ec54d7 --- /dev/null +++ b/workspaces/wi/wi-extension/resources/icons/wso2-integrator-logo.png @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + WSO2 + diff --git a/workspaces/wi/wi-extension/src/extension.ts b/workspaces/wi/wi-extension/src/extension.ts new file mode 100644 index 00000000000..f5eea5554af --- /dev/null +++ b/workspaces/wi/wi-extension/src/extension.ts @@ -0,0 +1,148 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as vscode from "vscode"; +import { COMMANDS, CONTEXT_KEYS, VIEWS } from "@wso2/wi-core"; +import { ext } from "./extensionVariables"; +import { ExtensionAPIs } from "./extensionAPIs"; +import { IntegratorTreeDataProvider } from "./treeDataProvider"; +import { WebviewManager } from "./webviewManager"; +import { registerMainRpcHandlers } from "./rpc-managers/main/rpc-handler"; +import { Messenger } from "vscode-messenger"; + +/** + * Activate the extension + */ +export async function activate(context: vscode.ExtensionContext): Promise { + ext.context = context; + ext.log("Activating WSO2 Integrator Extension"); + + try { + // Initialize extension APIs + const extensionAPIs = new ExtensionAPIs(); + // await extensionAPIs.initialize(); + + // Set context keys for available extensions + vscode.commands.executeCommand("setContext", CONTEXT_KEYS.BI_AVAILABLE, extensionAPIs.isBIAvailable()); + vscode.commands.executeCommand("setContext", CONTEXT_KEYS.MI_AVAILABLE, extensionAPIs.isMIAvailable()); + + // Create tree data provider + const treeDataProvider = new IntegratorTreeDataProvider(extensionAPIs); + + // Register tree view + const treeView = vscode.window.createTreeView(VIEWS.INTEGRATOR_EXPLORER, { + treeDataProvider, + showCollapseAll: true, + }); + context.subscriptions.push(treeView); + + // Create webview manager + const webviewManager = new WebviewManager(extensionAPIs); + context.subscriptions.push({ + dispose: () => webviewManager.dispose(), + }); + + // Register commands + registerCommands(context, treeDataProvider, webviewManager, extensionAPIs); + + ext.log("WSO2 Integrator Extension activated successfully"); + } catch (error) { + ext.logError("Failed to activate WSO2 Integrator Extension", error as Error); + vscode.window.showErrorMessage( + `Failed to activate WSO2 Integrator Extension: ${error instanceof Error ? error.message : String(error)}`, + ); + } +} + +/** + * Register extension commands + */ +function registerCommands( + context: vscode.ExtensionContext, + treeDataProvider: IntegratorTreeDataProvider, + webviewManager: WebviewManager, + extensionAPIs: ExtensionAPIs, +): void { + // Open welcome page command + context.subscriptions.push( + vscode.commands.registerCommand(COMMANDS.OPEN_WELCOME, () => { + try { + webviewManager.showWelcome(); + } catch (error) { + ext.logError("Failed to open welcome page", error as Error); + vscode.window.showErrorMessage("Failed to open welcome page"); + } + }), + ); + + // Refresh view command + context.subscriptions.push( + vscode.commands.registerCommand(COMMANDS.REFRESH_VIEW, () => { + try { + treeDataProvider.refresh(); + vscode.window.showInformationMessage("WSO2 Integrator view refreshed"); + } catch (error) { + ext.logError("Failed to refresh view", error as Error); + vscode.window.showErrorMessage("Failed to refresh view"); + } + }), + ); + + // Open BI integration command + context.subscriptions.push( + vscode.commands.registerCommand(COMMANDS.OPEN_BI_INTEGRATION, () => { + if (extensionAPIs.isBIAvailable()) { + vscode.commands.executeCommand("workbench.view.extension.ballerina-integrator"); + } else { + vscode.window.showInformationMessage( + "BI Extension is not available. Please install the Ballerina Integrator extension.", + "Install", + ).then((selection) => { + if (selection === "Install") { + vscode.commands.executeCommand("workbench.extensions.search", "@id:wso2.ballerina-integrator"); + } + }); + } + }), + ); + + // Open MI integration command + context.subscriptions.push( + vscode.commands.registerCommand(COMMANDS.OPEN_MI_INTEGRATION, () => { + if (extensionAPIs.isMIAvailable()) { + vscode.commands.executeCommand("workbench.view.extension.micro-integrator"); + } else { + vscode.window.showInformationMessage( + "MI Extension is not available. Please install the Micro Integrator extension.", + "Install", + ).then((selection) => { + if (selection === "Install") { + vscode.commands.executeCommand("workbench.extensions.search", "@id:wso2.micro-integrator"); + } + }); + } + }), + ); +} + +/** + * Deactivate the extension + */ +export function deactivate(): void { + ext.log("Deactivating WSO2 Integrator Extension"); +} diff --git a/workspaces/wi/wi-extension/src/extensionAPIs.ts b/workspaces/wi/wi-extension/src/extensionAPIs.ts new file mode 100644 index 00000000000..ec628a8140e --- /dev/null +++ b/workspaces/wi/wi-extension/src/extensionAPIs.ts @@ -0,0 +1,135 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as vscode from "vscode"; +import { EXTENSION_DEPENDENCIES, IntegrationType } from "@wso2/wi-core"; +import type { BIExtensionAPI, MIExtensionAPI, TreeItemData } from "@wso2/wi-core"; +import { ext } from "./extensionVariables"; + +/** + * Extension APIs manager + */ +export class ExtensionAPIs { + private biExtension: vscode.Extension | undefined; + private miExtension: vscode.Extension | undefined; + + /** + * Initialize extension APIs + */ + public async initialize(): Promise { + // Get BI extension + this.biExtension = vscode.extensions.getExtension(EXTENSION_DEPENDENCIES.BI); + if (this.biExtension && !this.biExtension.isActive) { + try { + await this.biExtension.activate(); + ext.log("BI Extension activated"); + } catch (error) { + ext.logError("Failed to activate BI extension", error as Error); + } + } + + // Get MI extension + this.miExtension = vscode.extensions.getExtension(EXTENSION_DEPENDENCIES.MI); + if (this.miExtension && !this.miExtension.isActive) { + try { + await this.miExtension.activate(); + ext.log("MI Extension activated"); + } catch (error) { + ext.logError("Failed to activate MI extension", error as Error); + } + } + } + + /** + * Check if BI extension is available + */ + public isBIAvailable(): boolean { + return this.biExtension !== undefined && this.biExtension.isActive; + } + + /** + * Check if MI extension is available + */ + public isMIAvailable(): boolean { + return this.miExtension !== undefined && this.miExtension.isActive; + } + + /** + * Get BI project explorer items + */ + public async getBIItems(): Promise { + if (!this.isBIAvailable() || !this.biExtension?.exports) { + return []; + } + + try { + return await this.biExtension.exports.getProjectExplorerItems(); + } catch (error) { + ext.logError("Failed to get BI items", error as Error); + return []; + } + } + + /** + * Get MI project explorer items + */ + public async getMIItems(): Promise { + if (!this.isMIAvailable() || !this.miExtension?.exports) { + return []; + } + + try { + return await this.miExtension.exports.getProjectExplorerItems(); + } catch (error) { + ext.logError("Failed to get MI items", error as Error); + return []; + } + } + + /** + * Get BI status + */ + public getBIStatus(): string { + if (!this.isBIAvailable() || !this.biExtension?.exports) { + return "unavailable"; + } + + try { + return this.biExtension.exports.getStatus(); + } catch (error) { + ext.logError("Failed to get BI status", error as Error); + return "error"; + } + } + + /** + * Get MI status + */ + public getMIStatus(): string { + if (!this.isMIAvailable() || !this.miExtension?.exports) { + return "unavailable"; + } + + try { + return this.miExtension.exports.getStatus(); + } catch (error) { + ext.logError("Failed to get MI status", error as Error); + return "error"; + } + } +} diff --git a/workspaces/wi/wi-extension/src/extensionVariables.ts b/workspaces/wi/wi-extension/src/extensionVariables.ts new file mode 100644 index 00000000000..30df50529d3 --- /dev/null +++ b/workspaces/wi/wi-extension/src/extensionVariables.ts @@ -0,0 +1,59 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as vscode from "vscode"; + +/** + * Extension context wrapper + */ +class ExtensionVariables { + private _context: vscode.ExtensionContext | undefined; + private _outputChannel: vscode.OutputChannel | undefined; + + get context(): vscode.ExtensionContext { + if (!this._context) { + throw new Error("Extension context not initialized"); + } + return this._context; + } + + set context(value: vscode.ExtensionContext) { + this._context = value; + } + + get outputChannel(): vscode.OutputChannel { + if (!this._outputChannel) { + this._outputChannel = vscode.window.createOutputChannel("WSO2 Integrator"); + } + return this._outputChannel; + } + + public log(message: string): void { + this.outputChannel.appendLine(`[${new Date().toISOString()}] ${message}`); + } + + public logError(message: string, error?: Error): void { + const errorMsg = error ? `${message}: ${error.message}` : message; + this.outputChannel.appendLine(`[${new Date().toISOString()}] ERROR: ${errorMsg}`); + if (error?.stack) { + this.outputChannel.appendLine(error.stack); + } + } +} + +export const ext = new ExtensionVariables(); diff --git a/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-handler.ts b/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-handler.ts new file mode 100644 index 00000000000..b4a4e63bf61 --- /dev/null +++ b/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-handler.ts @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * THIS FILE INCLUDES AUTO GENERATED CODE + */ +import { + openBiExtension, + openMiExtension, + runCommand, + RunCommandRequest +} from "@wso2/wi-core"; +import { Messenger } from "vscode-messenger"; +import { MainRpcManager } from "./rpc-manager"; + +export function registerMainRpcHandlers(messenger: Messenger) { + const rpcManger = new MainRpcManager(); + messenger.onNotification(openBiExtension, () => rpcManger.openBiExtension()); + messenger.onNotification(openMiExtension, () => rpcManger.openMiExtension()); + messenger.onRequest(runCommand, (args: RunCommandRequest) => rpcManger.runCommand(args)); +} diff --git a/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts b/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts new file mode 100644 index 00000000000..55fdaaffcf0 --- /dev/null +++ b/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * THIS FILE INCLUDES AUTO GENERATED CODE + */ +import { + RunCommandRequest, + RunCommandResponse, + WIVisualizerAPI +} from "@wso2/wi-core"; +import { ExtensionAPIs } from "../../extensionAPIs"; +import { commands } from "vscode"; + +export class MainRpcManager implements WIVisualizerAPI { + + async openBiExtension(): Promise { + commands.executeCommand("wso2.integrator.openBIIntegration"); + } + + async openMiExtension(): Promise { + commands.executeCommand("wso2.integrator.openMIIntegration"); + } + + async runCommand(props: RunCommandRequest): Promise { + return await commands.executeCommand("wso2.integrator.runCommand", props); + } +} diff --git a/workspaces/wi/wi-extension/src/treeDataProvider.ts b/workspaces/wi/wi-extension/src/treeDataProvider.ts new file mode 100644 index 00000000000..d17e985f1bf --- /dev/null +++ b/workspaces/wi/wi-extension/src/treeDataProvider.ts @@ -0,0 +1,167 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as vscode from "vscode"; +import { IntegrationType } from "@wso2/wi-core"; +import type { IntegrationItem, TreeItemData } from "@wso2/wi-core"; +import { ExtensionAPIs } from "./extensionAPIs"; +import { ext } from "./extensionVariables"; + +/** + * Tree item for the integrator explorer + */ +export class IntegratorTreeItem extends vscode.TreeItem { + constructor( + public readonly label: string, + public readonly collapsibleState: vscode.TreeItemCollapsibleState, + public readonly itemData?: TreeItemData, + public readonly integrationType?: IntegrationType, + ) { + super(label, collapsibleState); + + if (itemData) { + this.description = itemData.description; + this.tooltip = itemData.tooltip || label; + this.contextValue = itemData.contextValue; + + if (itemData.command) { + this.command = { + command: itemData.command.command, + title: itemData.command.title, + arguments: itemData.command.arguments, + }; + } + + if (itemData.iconPath) { + this.iconPath = new vscode.ThemeIcon(itemData.iconPath); + } + } + } +} + +/** + * Tree data provider for the integrator explorer + */ +export class IntegratorTreeDataProvider implements vscode.TreeDataProvider { + private _onDidChangeTreeData = new vscode.EventEmitter(); + readonly onDidChangeTreeData = this._onDidChangeTreeData.event; + + constructor(private extensionAPIs: ExtensionAPIs) {} + + /** + * Refresh the tree view + */ + public refresh(): void { + this._onDidChangeTreeData.fire(); + } + + /** + * Get tree item + */ + getTreeItem(element: IntegratorTreeItem): vscode.TreeItem { + return element; + } + + /** + * Get children of a tree item + */ + async getChildren(element?: IntegratorTreeItem): Promise { + if (!element) { + // Root level - show integration types + return this.getIntegrationTypes(); + } + + if (element.integrationType) { + // Get items for specific integration type + return this.getIntegrationItems(element.integrationType); + } + + return []; + } + + /** + * Get integration types (BI and MI) + */ + private async getIntegrationTypes(): Promise { + const items: IntegratorTreeItem[] = []; + + // Add BI integration type if available + if (this.extensionAPIs.isBIAvailable()) { + items.push( + new IntegratorTreeItem( + "Ballerina Integrator (BI)", + vscode.TreeItemCollapsibleState.Collapsed, + undefined, + IntegrationType.BI, + ), + ); + } + + // Add MI integration type if available + if (this.extensionAPIs.isMIAvailable()) { + items.push( + new IntegratorTreeItem( + "Micro Integrator (MI)", + vscode.TreeItemCollapsibleState.Collapsed, + undefined, + IntegrationType.MI, + ), + ); + } + + // If no extensions available, show message + if (items.length === 0) { + const messageItem = new IntegratorTreeItem("No integrations available", vscode.TreeItemCollapsibleState.None); + messageItem.tooltip = "Install BI or MI extension to get started"; + messageItem.iconPath = new vscode.ThemeIcon("info"); + items.push(messageItem); + } + + return items; + } + + /** + * Get items for a specific integration type + */ + private async getIntegrationItems(type: IntegrationType): Promise { + try { + let items: TreeItemData[] = []; + + if (type === IntegrationType.BI) { + items = await this.extensionAPIs.getBIItems(); + } else if (type === IntegrationType.MI) { + items = await this.extensionAPIs.getMIItems(); + } + + return items.map( + (item) => + new IntegratorTreeItem( + item.label, + item.collapsibleState !== undefined + ? item.collapsibleState + : vscode.TreeItemCollapsibleState.None, + item, + type, + ), + ); + } catch (error) { + ext.logError(`Failed to get items for ${type}`, error as Error); + return []; + } + } +} diff --git a/workspaces/wi/wi-extension/src/webviewManager.ts b/workspaces/wi/wi-extension/src/webviewManager.ts new file mode 100644 index 00000000000..dd9558aeec9 --- /dev/null +++ b/workspaces/wi/wi-extension/src/webviewManager.ts @@ -0,0 +1,275 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as vscode from "vscode"; +import { ViewType } from "@wso2/wi-core"; +import type { WelcomeWebviewProps } from "@wso2/wi-core"; +import { ExtensionAPIs } from "./extensionAPIs"; +import { ext } from "./extensionVariables"; +import { Uri } from "vscode"; +import path from "path"; +import { Messenger } from "vscode-messenger"; +import { registerMainRpcHandlers } from "./rpc-managers/main/rpc-handler"; + +/** + * Webview manager for WSO2 Integrator + */ +export class WebviewManager { + private currentPanel: vscode.WebviewPanel | undefined; + + constructor(private extensionAPIs: ExtensionAPIs) { } + + /** + * Show welcome webview + */ + public showWelcome(): void { + const columnToShowIn = vscode.window.activeTextEditor + ? vscode.window.activeTextEditor.viewColumn + : undefined; + + // If we already have a panel, show it + if (this.currentPanel) { + this.currentPanel.reveal(columnToShowIn); + return; + } + + // Create new panel + this.currentPanel = vscode.window.createWebviewPanel( + "wso2IntegratorWelcome", + "WSO2 Integrator - Welcome", + columnToShowIn || vscode.ViewColumn.One, + { + enableScripts: true, + retainContextWhenHidden: true, + localResourceRoots: [ + vscode.Uri.joinPath(ext.context.extensionUri, "dist"), + vscode.Uri.joinPath(ext.context.extensionUri, "resources"), + ], + }, + ); + + // Set the webview's html content + this.currentPanel.webview.html = this.getWebviewContent(this.currentPanel.webview); + + // Handle panel disposal + this.currentPanel.onDidDispose( + () => { + this.currentPanel = undefined; + }, + null, + ext.context.subscriptions, + ); + + // Handle messages from the webview + const messenger = new Messenger(); + messenger.registerWebviewPanel(this.currentPanel); + registerMainRpcHandlers(messenger); + + // Send initial data + this.sendWelcomeData(); + } + + /** + * Get webview HTML content + */ + private getWebviewContent(webview: vscode.Webview): string { + const isDevMode = process.env.WEB_VIEW_DEV_MODE === "true"; + + const componentName = "main"; + const filePath = path.join(ext.context.extensionPath, 'resources', 'jslibs', componentName + '.js'); + const scriptUri = isDevMode + ? new URL('lib/' + componentName + '.js', process.env.WEB_VIEW_DEV_HOST).toString() + : webview.asWebviewUri(Uri.file(filePath)).toString(); + + // CSP: allow dev server in dev mode + const cspSource = isDevMode + ? `${webview.cspSource} http://localhost:* ws://localhost:*` + : webview.cspSource; + + const styles = ` + .container { + background-color: var(--vscode-editor-background); + height: 100vh; + width: 100%; + margin: 0; + padding: 0; + overflow: hidden; + } + .loader-wrapper { + display: flex; + justify-content: center; + align-items: flex-start; + height: 100%; + width: 100%; + padding-top: 30vh; + } + .loader { + width: 32px; + aspect-ratio: 1; + border-radius: 50%; + border: 4px solid var(--vscode-button-background); + animation: + l20-1 0.8s infinite linear alternate, + l20-2 1.6s infinite linear; + } + @keyframes l20-1{ + 0% {clip-path: polygon(50% 50%,0 0, 50% 0%, 50% 0%, 50% 0%, 50% 0%, 50% 0% )} + 12.5% {clip-path: polygon(50% 50%,0 0, 50% 0%, 100% 0%, 100% 0%, 100% 0%, 100% 0% )} + 25% {clip-path: polygon(50% 50%,0 0, 50% 0%, 100% 0%, 100% 100%, 100% 100%, 100% 100% )} + 50% {clip-path: polygon(50% 50%,0 0, 50% 0%, 100% 0%, 100% 100%, 50% 100%, 0% 100% )} + 62.5% {clip-path: polygon(50% 50%,100% 0, 100% 0%, 100% 0%, 100% 100%, 50% 100%, 0% 100% )} + 75% {clip-path: polygon(50% 50%,100% 100%, 100% 100%, 100% 100%, 100% 100%, 50% 100%, 0% 100% )} + 100% {clip-path: polygon(50% 50%,50% 100%, 50% 100%, 50% 100%, 50% 100%, 50% 100%, 0% 100% )} + } + @keyframes l20-2{ + 0% {transform:scaleY(1) rotate(0deg)} + 49.99%{transform:scaleY(1) rotate(135deg)} + 50% {transform:scaleY(-1) rotate(0deg)} + 100% {transform:scaleY(-1) rotate(-135deg)} + } + .welcome-content { + text-align: center; + max-width: 500px; + padding: 2rem; + animation: fadeIn 1s ease-in-out; + font-family: var(--vscode-font-family); + } + .logo-container { + margin-bottom: 2rem; + display: flex; + justify-content: center; + } + .welcome-title { + color: var(--vscode-foreground); + margin: 0 0 0.5rem 0; + letter-spacing: -0.02em; + font-size: 1.5em; + font-weight: 400; + line-height: normal; + } + .welcome-subtitle { + color: var(--vscode-descriptionForeground); + font-size: 13px; + margin: 0 0 2rem 0; + opacity: 0.8; + } + .loading-text { + color: var(--vscode-foreground); + font-size: 13px; + font-weight: 500; + } + .loading-dots::after { + content: ''; + animation: dots 1.5s infinite; + } + @keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @keyframes dots { + 0%, 20% { content: ''; } + 40% { content: '.'; } + 60% { content: '..'; } + 80%, 100% { content: '...'; } + } + `; + + return ` + + + + + WSO2 Integrator + + + +
+
+
+
+
+
+
+
+
+ + + + `; + } + + /** + * Send welcome data to webview + */ + private sendWelcomeData(): void { + if (!this.currentPanel) { + return; + } + + const props: WelcomeWebviewProps = { + type: ViewType.WELCOME, + biAvailable: this.extensionAPIs.isBIAvailable(), + miAvailable: this.extensionAPIs.isMIAvailable(), + }; + + this.currentPanel.webview.postMessage({ + command: "initialize", + data: props, + }); + } + + /** + * Handle messages from webview + */ + private handleWebviewMessage(message: { command: string; data?: unknown }): void { + switch (message.command) { + case "openBI": + vscode.commands.executeCommand("wso2.integrator.openBIIntegration"); + break; + case "openMI": + vscode.commands.executeCommand("wso2.integrator.openMIIntegration"); + break; + case "refresh": + this.sendWelcomeData(); + break; + default: + ext.log(`Unknown webview command: ${message.command}`); + } + } + + /** + * Dispose webview + */ + public dispose(): void { + if (this.currentPanel) { + this.currentPanel.dispose(); + this.currentPanel = undefined; + } + } +} diff --git a/workspaces/wi/wi-extension/tsconfig.json b/workspaces/wi/wi-extension/tsconfig.json new file mode 100644 index 00000000000..d6ac62ad836 --- /dev/null +++ b/workspaces/wi/wi-extension/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "commonjs", + "lib": ["ES2020"], + "outDir": "./dist", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "sourceMap": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "out", "dist"] +} diff --git a/workspaces/wi/wi-extension/webpack.config.js b/workspaces/wi/wi-extension/webpack.config.js new file mode 100644 index 00000000000..f27dc61fec4 --- /dev/null +++ b/workspaces/wi/wi-extension/webpack.config.js @@ -0,0 +1,35 @@ +const path = require("path"); + +/**@type {import('webpack').Configuration}*/ +const config = { + target: "node", + entry: "./src/extension.ts", + output: { + path: path.resolve(__dirname, "dist"), + filename: "extension.js", + libraryTarget: "commonjs2", + devtoolModuleFilenameTemplate: "../[resource-path]", + }, + devtool: "source-map", + externals: { + vscode: "commonjs vscode", + }, + resolve: { + extensions: [".ts", ".js"], + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + use: [ + { + loader: "ts-loader", + }, + ], + }, + ], + }, +}; + +module.exports = config; diff --git a/workspaces/wi/wi-rpc-client/config/rush-project.json b/workspaces/wi/wi-rpc-client/config/rush-project.json new file mode 100644 index 00000000000..3c3241c8f6a --- /dev/null +++ b/workspaces/wi/wi-rpc-client/config/rush-project.json @@ -0,0 +1,3 @@ +{ + "extends": "../../../rush-config.json" +} diff --git a/workspaces/wi/wi-rpc-client/eslint.config.cjs b/workspaces/wi/wi-rpc-client/eslint.config.cjs new file mode 100644 index 00000000000..91c2f84c5b6 --- /dev/null +++ b/workspaces/wi/wi-rpc-client/eslint.config.cjs @@ -0,0 +1,31 @@ +/* eslint-disable @typescript-eslint/no-require-imports, no-undef */ +const { + defineConfig, + globalIgnores, +} = require("eslint/config"); + +const tsParser = require("@typescript-eslint/parser"); +const typescriptEslint = require("@typescript-eslint/eslint-plugin"); +const js = require("@eslint/js"); + +const { + FlatCompat, +} = require("@eslint/eslintrc"); + +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +module.exports = defineConfig([{ + extends: compat.extends("eslint:recommended", "plugin:@typescript-eslint/recommended"), + + languageOptions: { + parser: tsParser, + }, + + plugins: { + "@typescript-eslint": typescriptEslint, + }, +}, globalIgnores(["**/lib", "**/.eslintrc.js", "**/*.d.ts"])]); diff --git a/workspaces/wi/wi-rpc-client/package.json b/workspaces/wi/wi-rpc-client/package.json new file mode 100644 index 00000000000..dd4ee884631 --- /dev/null +++ b/workspaces/wi/wi-rpc-client/package.json @@ -0,0 +1,37 @@ +{ + "name": "@wso2/wi-rpc-client", + "version": "1.0.0", + "description": "Contains RPC related client registrations", + "main": "lib/index.js", + "scripts": { + "lint": "eslint .", + "build": "pnpm run lint && tsc --pretty", + "watch": "tsc --pretty --watch", + "test": "echo \"Error: no test specified\" && exit 1", + "deploy": "npm publish" + }, + "author": "WSO2", + "devDependencies": { + "@types/react": "18.2.0", + "@types/react-dom": "18.2.0", + "typescript": "5.8.3", + "@typescript-eslint/parser": "^8.32.1", + "@typescript-eslint/eslint-plugin": "^8.32.1", + "eslint": "^9.27.0" + }, + "dependencies": { + "@types/vscode-webview": "^1.57.5", + "vscode-messenger-common": "^0.5.1", + "vscode-messenger-webview": "^0.5.1", + "@wso2/wi-core": "workspace:*", + "react": "19.1.0", + "react-dom": "19.1.0" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/wso2/ballerina-plugin-vscode.git" + }, + "publishConfig": { + "registry": "https://npm.pkg.github.com/" + } +} diff --git a/workspaces/wi/wi-rpc-client/src/RpcClient.ts b/workspaces/wi/wi-rpc-client/src/RpcClient.ts new file mode 100644 index 00000000000..bc6ad5af5b3 --- /dev/null +++ b/workspaces/wi/wi-rpc-client/src/RpcClient.ts @@ -0,0 +1,40 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Messenger } from "vscode-messenger-webview"; +import { vscode } from "./vscode"; +import { MainRpcClient } from "./rpc-clients/main/rpc-client"; + +export class RpcClient { + + private messenger: Messenger; + private mainRpcClient: MainRpcClient; + + constructor() { + this.messenger = new Messenger(vscode); + this.messenger.start(); + this.mainRpcClient = new MainRpcClient(this.messenger); + } + + public getMainRpcClient(): MainRpcClient { + return this.mainRpcClient; + } + +} diff --git a/workspaces/wi/wi-rpc-client/src/index.ts b/workspaces/wi/wi-rpc-client/src/index.ts new file mode 100644 index 00000000000..472e59fa74f --- /dev/null +++ b/workspaces/wi/wi-rpc-client/src/index.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export { RpcClient } from './RpcClient'; diff --git a/workspaces/wi/wi-rpc-client/src/rpc-clients/main/rpc-client.ts b/workspaces/wi/wi-rpc-client/src/rpc-clients/main/rpc-client.ts new file mode 100644 index 00000000000..59c6c33b5da --- /dev/null +++ b/workspaces/wi/wi-rpc-client/src/rpc-clients/main/rpc-client.ts @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + * THIS FILE INCLUDES AUTO GENERATED CODE + */ +import { + RunCommandRequest, + RunCommandResponse, + WIVisualizerAPI, + openBiExtension, + openMiExtension, + runCommand +} from "@wso2/wi-core"; +import { HOST_EXTENSION } from "vscode-messenger-common"; +import { Messenger } from "vscode-messenger-webview"; + +export class MainRpcClient implements WIVisualizerAPI { + private _messenger: Messenger; + + constructor(messenger: Messenger) { + this._messenger = messenger; + } + + openBiExtension(): void { + return this._messenger.sendNotification(openBiExtension, HOST_EXTENSION); + } + + openMiExtension(): void { + return this._messenger.sendNotification(openMiExtension, HOST_EXTENSION); + } + + runCommand(params: RunCommandRequest): Promise { + return this._messenger.sendRequest(runCommand, HOST_EXTENSION, params); + } +} diff --git a/workspaces/wi/wi-rpc-client/src/vscode.ts b/workspaces/wi/wi-rpc-client/src/vscode.ts new file mode 100644 index 00000000000..dd18b70ded1 --- /dev/null +++ b/workspaces/wi/wi-rpc-client/src/vscode.ts @@ -0,0 +1,95 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import type { WebviewApi } from "vscode-webview"; + +/** + * A utility wrapper around the acquireVsCodeApi() function, which enables + * message passing and state management between the webview and extension + * contexts. + * + * This utility also enables webview code to be run in a web browser-based + * dev server by using native web browser features that mock the functionality + * enabled by acquireVsCodeApi. + */ +class VSCodeAPIWrapper { + private readonly vsCodeApi: WebviewApi | undefined; + + constructor() { + // Check if the acquireVsCodeApi function exists in the current development + // context (i.e. VS Code development window or web browser) + if (typeof acquireVsCodeApi === "function") { + this.vsCodeApi = acquireVsCodeApi(); + } + } + + /** + * Post a message (i.e. send arbitrary data) to the owner of the webview. + * + * @remarks When running webview code inside a web browser, postMessage will instead + * log the given message to the console. + * + * @param message Abitrary data (must be JSON serializable) to send to the extension context. + */ + public postMessage(message: unknown) { + if (this.vsCodeApi) { + this.vsCodeApi.postMessage(message); + } else { + console.log(message); + } + } + + /** + * Get the persistent state stored for this webview. + * + * @remarks When running webview source code inside a web browser, getState will retrieve state + * from local storage (https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage). + * + * @return The current state or `undefined` if no state has been set. + */ + public getState(): unknown | undefined { + if (this.vsCodeApi) { + return this.vsCodeApi.getState(); + } else { + const state = localStorage.getItem("vscodeState"); + return state ? JSON.parse(state) : undefined; + } + } + + /** + * Set the persistent state stored for this webview. + * + * @remarks When running webview source code inside a web browser, setState will set the given + * state using local storage (https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage). + * + * @param newState New persisted state. This must be a JSON serializable object. Can be retrieved + * using {@link getState}. + * + * @return The new state. + */ + public setState(newState: T): T { + if (this.vsCodeApi) { + return this.vsCodeApi.setState(newState); + } else { + localStorage.setItem("vscodeState", JSON.stringify(newState)); + return newState; + } + } +} + +// Exports class singleton to prevent multiple invocations of acquireVsCodeApi. +export const vscode = new VSCodeAPIWrapper(); \ No newline at end of file diff --git a/workspaces/wi/wi-rpc-client/tsconfig.json b/workspaces/wi/wi-rpc-client/tsconfig.json new file mode 100644 index 00000000000..58613a52935 --- /dev/null +++ b/workspaces/wi/wi-rpc-client/tsconfig.json @@ -0,0 +1,44 @@ +{ + "compilerOptions": { + "module": "CommonJS", + "target": "ES6", + "useDefineForClassFields": true, + "lib": ["ES6", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + "outDir": "./lib", + "rootDir": "./src", + + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react", + "sourceMap": true, + "declaration": true, + "declarationDir": "./lib", + "esModuleInterop": true, + + "strict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noFallthroughCasesInSwitch": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "strictNullChecks": false, + "preserveSymlinks": true, + "noImplicitReturns": false, + "noImplicitAny": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "noImplicitThis": true, + "typeRoots": [ + "node_modules/@types" + ], + }, + "include": [ + "src" + ], + "exclude": [ + "node_modules", + "lib" + ] +} diff --git a/workspaces/wi/wi-webviews/biome.json b/workspaces/wi/wi-webviews/biome.json new file mode 100644 index 00000000000..bcec3347ac9 --- /dev/null +++ b/workspaces/wi/wi-webviews/biome.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "ignore": [] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab" + }, + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": false + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + } +} diff --git a/workspaces/wi/wi-webviews/config/rush-project.json b/workspaces/wi/wi-webviews/config/rush-project.json new file mode 100644 index 00000000000..3c3241c8f6a --- /dev/null +++ b/workspaces/wi/wi-webviews/config/rush-project.json @@ -0,0 +1,3 @@ +{ + "extends": "../../../rush-config.json" +} diff --git a/workspaces/wi/wi-webviews/package.json b/workspaces/wi/wi-webviews/package.json new file mode 100644 index 00000000000..f82fdd89a47 --- /dev/null +++ b/workspaces/wi/wi-webviews/package.json @@ -0,0 +1,44 @@ +{ + "name": "@wso2/wi-webviews", + "version": "1.0.0", + "description": "Webview components for WSO2 Integrator Extension", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "scripts": { + "lint": "biome check .", + "lint:fix": "biome check --write --unsafe .", + "start": "webpack-dev-server --mode=development --progress", + "build": "tsc --pretty && webpack --mode production && npm run copy:assets", + "copy:assets": "copyfiles -u 1 \"src/**/*.css\" \"src/**/*.svg\" \"src/**/*.png\" lib/" + }, + "keywords": [], + "author": "WSO2", + "license": "Apache-2.0", + "dependencies": { + "@vscode/webview-ui-toolkit": "^1.4.0", + "@wso2/wi-core": "workspace:*", + "react": "18.2.0", + "react-dom": "18.2.0", + "vscode-messenger-common": "^0.5.1", + "vscode-messenger-webview": "^0.5.1", + "classnames": "~2.5.1", + "@pmmmwh/react-refresh-webpack-plugin": "~0.6.1", + "@wso2/wi-rpc-client": "workspace:*" + }, + "devDependencies": { + "@biomejs/biome": "^1.9.4", + "@types/node": "^22.15.21", + "@types/react": "18.2.0", + "@types/react-dom": "18.2.0", + "copyfiles": "~2.4.1", + "css-loader": "^7.1.2", + "style-loader": "^4.0.0", + "typescript": "5.8.3", + "webpack": "^5.102.1", + "webpack-cli": "^6.0.1", + "webpack-dev-server": "^5.2.2", + "ts-loader": "^9.5.1", + "react-hot-loader": "~4.13.1", + "source-map-loader": "~5.0.0" + } +} diff --git a/workspaces/wi/wi-webviews/src/IntegratorWebview.tsx b/workspaces/wi/wi-webviews/src/IntegratorWebview.tsx new file mode 100644 index 00000000000..6cc93689f7b --- /dev/null +++ b/workspaces/wi/wi-webviews/src/IntegratorWebview.tsx @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from "react"; +import { ViewType } from "@wso2/wi-core"; +import type { WebviewProps, WelcomeWebviewProps } from "@wso2/wi-core"; +import { WelcomeView } from "./views/WelcomeView"; + +function IntegratorWebview(props: WebviewProps) { + switch (props.type) { + case ViewType.WELCOME: + return ; + default: + return ( +
+

Unknown View Type

+

The requested view is not available.

+
+ ); + } +} + +export default IntegratorWebview; diff --git a/workspaces/wi/wi-webviews/src/index.tsx b/workspaces/wi/wi-webviews/src/index.tsx new file mode 100644 index 00000000000..1ecaf9bf269 --- /dev/null +++ b/workspaces/wi/wi-webviews/src/index.tsx @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from "react"; +import ReactDOM from "react-dom/client"; +import { ViewType, type WebviewProps } from "@wso2/wi-core"; +import IntegratorWebview from "./IntegratorWebview"; +import "./style.css"; + +const defaultProps: WebviewProps = { + type: ViewType.WELCOME, + biAvailable: true, + miAvailable: true, +}; +export function renderWebview(target: HTMLElement) { + const reactRoot = ReactDOM.createRoot(target); + reactRoot.render( + + + , + ); +} diff --git a/workspaces/wi/wi-webviews/src/style.css b/workspaces/wi/wi-webviews/src/style.css new file mode 100644 index 00000000000..d238fb4c09f --- /dev/null +++ b/workspaces/wi/wi-webviews/src/style.css @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +body { + margin: 0; + padding: 0; + font-family: var(--vscode-font-family); + font-size: var(--vscode-font-size); + color: var(--vscode-foreground); + background-color: var(--vscode-editor-background); +} + +* { + box-sizing: border-box; +} + +#root { + width: 100%; + height: 100vh; + overflow-y: auto; +} diff --git a/workspaces/wi/wi-webviews/src/views/WelcomeView.css b/workspaces/wi/wi-webviews/src/views/WelcomeView.css new file mode 100644 index 00000000000..64c58119c22 --- /dev/null +++ b/workspaces/wi/wi-webviews/src/views/WelcomeView.css @@ -0,0 +1,167 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +.welcome-container { + padding: 2rem; + max-width: 1200px; + margin: 0 auto; + font-family: var(--vscode-font-family); +} + +.welcome-header { + text-align: center; + margin-bottom: 3rem; +} + +.welcome-header h1 { + font-size: 2.5rem; + margin-bottom: 0.5rem; + color: var(--vscode-foreground); +} + +.welcome-subtitle { + font-size: 1.1rem; + color: var(--vscode-descriptionForeground); +} + +.integrations-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); + gap: 2rem; + margin-bottom: 3rem; +} + +.integration-card { + background-color: var(--vscode-editor-background); + border: 1px solid var(--vscode-panel-border); + border-radius: 8px; + padding: 2rem; + transition: transform 0.2s, box-shadow 0.2s; +} + +.integration-card:hover { + transform: translateY(-4px); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); +} + +.integration-card.unavailable { + opacity: 0.6; +} + +.card-icon { + width: 64px; + height: 64px; + border-radius: 12px; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 1rem; + font-size: 1.5rem; + font-weight: bold; + color: white; +} + +.bi-icon { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); +} + +.mi-icon { + background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); +} + +.integration-card h2 { + font-size: 1.5rem; + margin-bottom: 0.5rem; + color: var(--vscode-foreground); +} + +.integration-card p { + color: var(--vscode-descriptionForeground); + line-height: 1.6; + margin-bottom: 1.5rem; +} + +.primary-button { + background-color: var(--vscode-button-background); + color: var(--vscode-button-foreground); + border: none; + padding: 0.75rem 1.5rem; + border-radius: 4px; + font-size: 1rem; + cursor: pointer; + transition: background-color 0.2s; +} + +.primary-button:hover { + background-color: var(--vscode-button-hoverBackground); +} + +.not-available { + padding: 1rem; + background-color: var(--vscode-inputValidation-warningBackground); + border: 1px solid var(--vscode-inputValidation-warningBorder); + border-radius: 4px; +} + +.warning-text { + color: var(--vscode-inputValidation-warningForeground); + font-weight: bold; + margin-bottom: 0.5rem; +} + +.help-text { + color: var(--vscode-descriptionForeground); + font-size: 0.9rem; +} + +.quick-links { + margin-top: 3rem; +} + +.quick-links h3 { + font-size: 1.5rem; + margin-bottom: 1rem; + color: var(--vscode-foreground); +} + +.links-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 1rem; +} + +.link-card { + display: flex; + align-items: center; + gap: 0.75rem; + padding: 1rem; + background-color: var(--vscode-editor-background); + border: 1px solid var(--vscode-panel-border); + border-radius: 4px; + text-decoration: none; + color: var(--vscode-textLink-foreground); + transition: background-color 0.2s; +} + +.link-card:hover { + background-color: var(--vscode-list-hoverBackground); +} + +.link-icon { + font-size: 1.5rem; +} diff --git a/workspaces/wi/wi-webviews/src/views/WelcomeView.tsx b/workspaces/wi/wi-webviews/src/views/WelcomeView.tsx new file mode 100644 index 00000000000..ef01692ef46 --- /dev/null +++ b/workspaces/wi/wi-webviews/src/views/WelcomeView.tsx @@ -0,0 +1,135 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from "react"; +import type { WelcomeWebviewProps } from "@wso2/wi-core"; +import "./WelcomeView.css"; +import { RpcClient } from "@wso2/wi-rpc-client"; + +export const WelcomeView: React.FC = ({ biAvailable, miAvailable }) => { + const rpcClient = new RpcClient(); + const handleOpenBI = () => { + rpcClient.getMainRpcClient().openBiExtension(); + }; + + const handleOpenMI = () => { + rpcClient.getMainRpcClient().openMiExtension(); + }; + + return ( +
+
+

Welcome to WSO2 Integrator

+

+ Unified development environment for Ballerina Integrator (BI) and Micro Integrator (MI) +

+
+ +
+
+
+ BI +
+

Ballerina Integrator

+

+ Design, develop, and debug integration solutions using Ballerina programming language with low-code + capabilities. +

+ {biAvailable ? ( + + ) : ( +
+

Extension not installed

+

Install the Ballerina Integrator extension to get started

+
+ )} +
+ +
+
+ MI +
+

Micro Integrator

+

+ Build enterprise integration solutions with graphical design, data mapping, and comprehensive runtime + support. +

+ {miAvailable ? ( + + ) : ( +
+

Extension not installed

+

Install the Micro Integrator extension to get started

+
+ )} +
+
+ + +
+ ); +}; diff --git a/workspaces/wi/wi-webviews/tsconfig.json b/workspaces/wi/wi-webviews/tsconfig.json new file mode 100644 index 00000000000..1b3ad20e7f1 --- /dev/null +++ b/workspaces/wi/wi-webviews/tsconfig.json @@ -0,0 +1,45 @@ +{ + "compilerOptions": { + + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "outDir": "./lib", + "rootDir": "./src", + + + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "sourceMap": true, + "jsx": "react-jsx", + "declaration": true, + "declarationDir": "./lib", + "esModuleInterop": true, + + "strict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noFallthroughCasesInSwitch": true, + "allowJs": false, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "strictNullChecks": false, + "preserveSymlinks": true, + "noImplicitReturns": false, + "noImplicitAny": true, + "typeRoots": [ + "node_modules/@types" + ], + "paths": { + "react": ["./node_modules/@types/react"] + } + }, + "include": ["src"], + "exclude": [ + "node_modules", + "build" + ] +} \ No newline at end of file diff --git a/workspaces/wi/wi-webviews/webpack.config.js b/workspaces/wi/wi-webviews/webpack.config.js new file mode 100644 index 00000000000..b5e22ab2fa0 --- /dev/null +++ b/workspaces/wi/wi-webviews/webpack.config.js @@ -0,0 +1,77 @@ +const path = require("path"); +const webpack = require("webpack"); +const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); + +module.exports = { + entry: "./src/index.tsx", + target: "web", + devtool: !process.env.CI ? "source-map" : undefined, + mode: !process.env.CI ? "development" : "production", + output: { + path: path.resolve(__dirname, "lib"), + filename: "main.js", + library: "visualizerWebview", + devtoolModuleFilenameTemplate: function (info) { + return "file:///" + encodeURI(info.absoluteResourcePath); + }, + publicPath: "http://localhost:3000/lib/", + }, + resolve: { + extensions: [".js", ".jsx", ".json", ".ts", ".tsx"], + alias: { + 'react': path.resolve(__dirname, 'node_modules/react'), + 'react-dom': path.resolve(__dirname, 'node_modules/react-dom') + }, + fallback: { 'process/browser': require.resolve('process/browser'), } + }, + module: { + rules: [ + { + test: /\.(ts|tsx)$/, + loader: "ts-loader", + exclude: '/node_modules/', + }, + { + test: /\.css$/, + use: [ + 'style-loader', + 'css-loader' + ] + }, + { + test: /\.s[ac]ss$/i, + use: ["style-loader", "css-loader", "sass-loader"], + }, + { + test: /\.(woff|woff2|ttf|eot)$/, + type: 'asset/inline', + }, + { + test: /\.(svg|png)$/, + type: 'asset/resource', + generator: { + filename: './images/[name][ext]', + }, + } + ], + noParse: [require.resolve("@ts-morph/common/dist/typescript.js")], + }, + devServer: { + allowedHosts: 'all', + port: 3000, + headers: { + 'Access-Control-Allow-Origin': '*', + }, + devMiddleware: { + writeToDisk: true, + mimeTypes: { 'text/css': ['css'] }, + }, + hot: true, + }, + plugins: [ + new webpack.ProvidePlugin({ + process: "process/browser", + }), + new ReactRefreshWebpackPlugin(), + ], +}; \ No newline at end of file From 20b0106472735aa37aaf565268502453d69c2ca9 Mon Sep 17 00:00:00 2001 From: kaumini Date: Fri, 7 Nov 2025 10:22:53 +0530 Subject: [PATCH 02/55] Support Bal project open --- .../src/bi-treeview/biExtentionContext.ts | 30 ++ .../src/bi-treeview/constants/index.ts | 19 + .../bi-treeview/project-explorer/activate.ts | 102 +++++ .../project-explorer-provider.ts | 351 ++++++++++++++++++ .../src/bi-treeview/stateMachine.ts | 88 +++++ .../wi/wi-extension/src/bi-treeview/utils.ts | 79 ++++ workspaces/wi/wi-extension/src/extension.ts | 39 +- .../wi/wi-extension/src/treeDataProvider.ts | 167 --------- 8 files changed, 680 insertions(+), 195 deletions(-) create mode 100644 workspaces/wi/wi-extension/src/bi-treeview/biExtentionContext.ts create mode 100644 workspaces/wi/wi-extension/src/bi-treeview/constants/index.ts create mode 100644 workspaces/wi/wi-extension/src/bi-treeview/project-explorer/activate.ts create mode 100644 workspaces/wi/wi-extension/src/bi-treeview/project-explorer/project-explorer-provider.ts create mode 100644 workspaces/wi/wi-extension/src/bi-treeview/stateMachine.ts create mode 100644 workspaces/wi/wi-extension/src/bi-treeview/utils.ts delete mode 100644 workspaces/wi/wi-extension/src/treeDataProvider.ts diff --git a/workspaces/wi/wi-extension/src/bi-treeview/biExtentionContext.ts b/workspaces/wi/wi-extension/src/bi-treeview/biExtentionContext.ts new file mode 100644 index 00000000000..dfa13fe3303 --- /dev/null +++ b/workspaces/wi/wi-extension/src/bi-treeview/biExtentionContext.ts @@ -0,0 +1,30 @@ + +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ExtendedLangClientInterface } from "@wso2/ballerina-core"; +import { ExtensionContext } from "vscode"; + +export class ExtensionVariables { + public context!: ExtensionContext; + public langClient!: ExtendedLangClientInterface; + public biSupported?: boolean; + public isNPSupported?: boolean; +} + +export const extension = new ExtensionVariables(); diff --git a/workspaces/wi/wi-extension/src/bi-treeview/constants/index.ts b/workspaces/wi/wi-extension/src/bi-treeview/constants/index.ts new file mode 100644 index 00000000000..182bfeda524 --- /dev/null +++ b/workspaces/wi/wi-extension/src/bi-treeview/constants/index.ts @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// ADD ALL THE NON-SHARED BI ONLY ATTRIBUTES HERE. diff --git a/workspaces/wi/wi-extension/src/bi-treeview/project-explorer/activate.ts b/workspaces/wi/wi-extension/src/bi-treeview/project-explorer/activate.ts new file mode 100644 index 00000000000..84a47ba71ba --- /dev/null +++ b/workspaces/wi/wi-extension/src/bi-treeview/project-explorer/activate.ts @@ -0,0 +1,102 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import { SHARED_COMMANDS, BI_COMMANDS } from '@wso2/ballerina-core'; +import { ProjectExplorerEntry, ProjectExplorerEntryProvider } from './project-explorer-provider'; +import { ExtensionContext, TreeView, commands, window, workspace } from 'vscode'; +import { extension } from '../biExtentionContext'; +import { VIEWS } from '@wso2/wi-core'; + +interface ExplorerActivationConfig { + context: ExtensionContext; + isBI: boolean; + isBallerina?: boolean; + isMultiRoot?: boolean; +} + +export function activateProjectExplorer(config: ExplorerActivationConfig) { + const { context, isBI, isBallerina, isMultiRoot } = config; + + if (extension.langClient && extension.biSupported) { + setLoadingStatus(); + } + + const projectExplorerDataProvider = new ProjectExplorerEntryProvider(); + const projectTree = createProjectTree(projectExplorerDataProvider); + + if (isBallerina) { + registerBallerinaCommands(projectExplorerDataProvider, isBI, isMultiRoot); + } + + handleVisibilityChangeEvents(projectTree, projectExplorerDataProvider, isBallerina); + context.subscriptions.push(workspace.onDidDeleteFiles(() => projectExplorerDataProvider.refresh())); +} + +function setLoadingStatus() { + commands.executeCommand('setContext', 'BI.status', 'loading'); +} + +function createProjectTree(dataProvider: ProjectExplorerEntryProvider) { + return window.createTreeView(VIEWS.INTEGRATOR_EXPLORER, { treeDataProvider: dataProvider }); +} + +function registerBallerinaCommands(dataProvider: ProjectExplorerEntryProvider, isBI: boolean, isMultiRoot?: boolean) { + commands.registerCommand(BI_COMMANDS.REFRESH_COMMAND, () => dataProvider.refresh()); + + if (isMultiRoot) { + commands.executeCommand('setContext', 'BI.isMultiRoot', true); + } + if (isBI) { + registerBICommands(); + } +} + +function handleVisibilityChangeEvents(tree: TreeView, dataProvider: ProjectExplorerEntryProvider, isBallerina?: boolean) { + tree.onDidChangeVisibility(async res => await handleVisibilityChange(res, dataProvider, isBallerina)); +} + +async function handleVisibilityChange(res: { visible: boolean }, dataProvider: ProjectExplorerEntryProvider, isBallerina?: boolean) { + if (res.visible) { + if (isBallerina && extension.biSupported) { + commands.executeCommand(SHARED_COMMANDS.SHOW_VISUALIZER); + await commands.executeCommand(SHARED_COMMANDS.FORCE_UPDATE_PROJECT_ARTIFACTS); + dataProvider.refresh(); + } else { + handleNonBallerinaVisibility(); + } + } +} + +function handleNonBallerinaVisibility() { + if (extension.langClient) { + if (!extension.biSupported) { + commands.executeCommand('setContext', 'BI.status', 'updateNeed'); + } else { + commands.executeCommand('setContext', 'BI.status', 'unknownProject'); + } + } else { + commands.executeCommand('setContext', 'BI.status', 'noLS'); + } + commands.executeCommand(SHARED_COMMANDS.OPEN_BI_WELCOME); +} + +function registerBICommands() { + commands.executeCommand(BI_COMMANDS.FOCUS_PROJECT_EXPLORER); + commands.executeCommand(SHARED_COMMANDS.SHOW_VISUALIZER); + commands.executeCommand('setContext', 'BI.project', true); +} + diff --git a/workspaces/wi/wi-extension/src/bi-treeview/project-explorer/project-explorer-provider.ts b/workspaces/wi/wi-extension/src/bi-treeview/project-explorer/project-explorer-provider.ts new file mode 100644 index 00000000000..4e6e7d26c33 --- /dev/null +++ b/workspaces/wi/wi-extension/src/bi-treeview/project-explorer/project-explorer-provider.ts @@ -0,0 +1,351 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as vscode from 'vscode'; +import { window, Uri, commands } from 'vscode'; +import path = require('path'); +import { DIRECTORY_MAP, ProjectStructureArtifactResponse, ProjectStructureResponse, SHARED_COMMANDS, BI_COMMANDS, PackageConfigSchema, BallerinaProject, VisualizerLocation } from "@wso2/ballerina-core"; +import { extension } from "../biExtentionContext"; + +export class ProjectExplorerEntry extends vscode.TreeItem { + children: ProjectExplorerEntry[] | undefined; + info: string | undefined; + + constructor( + public readonly label: string, + public collapsibleState: vscode.TreeItemCollapsibleState, + info: string | undefined = undefined, + icon: string = 'folder', + isCodicon: boolean = false + ) { + super(label, collapsibleState); + this.tooltip = `${this.label}`; + this.info = info; + if (icon && isCodicon) { + this.iconPath = new vscode.ThemeIcon(icon); + } else if (icon) { + this.iconPath = { + light: vscode.Uri.file(path.join(extension.context.extensionPath, 'assets', `light-${icon}.svg`)), + dark: vscode.Uri.file(path.join(extension.context.extensionPath, 'assets', `dark-${icon}.svg`)) + }; + } + } +} + +export class ProjectExplorerEntryProvider implements vscode.TreeDataProvider { + private _data: ProjectExplorerEntry[]; + private _onDidChangeTreeData: vscode.EventEmitter + = new vscode.EventEmitter(); + readonly onDidChangeTreeData: vscode.Event + = this._onDidChangeTreeData.event; + + refresh(): void { + window.withProgress({ + location: { viewId: BI_COMMANDS.PROJECT_EXPLORER }, + title: 'Loading project structure' + }, async () => { + try { + const data = await getProjectStructureData(); + this._data = data; + // Fire the event after data is fully populated + this._onDidChangeTreeData.fire(); + } catch (err) { + console.error(err); + this._data = []; + this._onDidChangeTreeData.fire(); + } + }); + } + + constructor() { + this._data = []; + } + + getTreeItem(element: ProjectExplorerEntry): vscode.TreeItem | Thenable { + return element; + } + + getChildren(element?: ProjectExplorerEntry | undefined): vscode.ProviderResult { + if (element === undefined) { + return this._data; + } + return element.children; + } + + getParent(element: ProjectExplorerEntry): vscode.ProviderResult { + if (element.info === undefined) return undefined; + + const projects = (this._data); + for (const project of projects) { + if (project.children?.find(child => child.info === element.info)) { + return project; + } + const fileElement = this.recursiveSearchParent(project, element.info); + if (fileElement) { + return fileElement; + } + } + return element; + } + + recursiveSearchParent(element: ProjectExplorerEntry, path: string): ProjectExplorerEntry | undefined { + if (!element.children) { + return undefined; + } + for (const child of element.children) { + if (child.info === path) { + return element; + } + const foundParent = this.recursiveSearchParent(child, path); + if (foundParent) { + return foundParent; + } + } + return undefined; + } +} + +async function getProjectStructureData(): Promise { + if (vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) { + const data: ProjectExplorerEntry[] = []; + if (extension.langClient) { + const stateContext: VisualizerLocation = await commands.executeCommand(SHARED_COMMANDS.GET_STATE_CONTEXT); + const workspace = vscode + .workspace + .workspaceFolders + .find(folder => folder.uri.fsPath === stateContext.projectUri); + + if (!workspace) { + return []; + } + + // Get the state context from ballerina extension as it maintain the event driven tree data + let projectStructure; + if (typeof stateContext === 'object' && stateContext !== null && 'projectStructure' in stateContext && stateContext.projectStructure !== null) { + projectStructure = stateContext.projectStructure; + const projectTree = generateTreeData(workspace, projectStructure); + if (projectTree) { + data.push(projectTree); + } + } + + return data; + } + } + return []; +} + +function generateTreeData(project: vscode.WorkspaceFolder, components: ProjectStructureResponse): ProjectExplorerEntry | undefined { + const projectRootPath = project.uri.fsPath; + const projectRootEntry = new ProjectExplorerEntry( + `${project.name}`, + vscode.TreeItemCollapsibleState.Expanded, + projectRootPath, + 'project', + true + ); + projectRootEntry.contextValue = 'bi-project'; + const children = getEntriesBI(components); + projectRootEntry.children = children; + + return projectRootEntry; +} + +function getEntriesBI(components: ProjectStructureResponse): ProjectExplorerEntry[] { + const entries: ProjectExplorerEntry[] = []; + + // ---------- Entry Points ---------- + const entryPoints = new ProjectExplorerEntry( + "Entry Points", + vscode.TreeItemCollapsibleState.Expanded, + null, + 'start', + false + ); + entryPoints.contextValue = "entryPoint"; + entryPoints.children = []; + if (components.directoryMap[DIRECTORY_MAP.AUTOMATION].length > 0) { + entryPoints.children.push(...getComponents(components.directoryMap[DIRECTORY_MAP.AUTOMATION], DIRECTORY_MAP.AUTOMATION)); + } + entryPoints.children.push(...getComponents(components.directoryMap[DIRECTORY_MAP.SERVICE], DIRECTORY_MAP.SERVICE)); + if (entryPoints.children.length > 0) { + entryPoints.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; + } + entries.push(entryPoints); + + // ---------- Listeners ---------- + const listeners = new ProjectExplorerEntry( + "Listeners", + vscode.TreeItemCollapsibleState.Expanded, + null, + 'radio', + false + ); + listeners.contextValue = "listeners"; + listeners.children = getComponents(components.directoryMap[DIRECTORY_MAP.LISTENER], DIRECTORY_MAP.LISTENER); + if (listeners.children.length > 0) { + listeners.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; + } + entries.push(listeners); + + // ---------- Connections ---------- + const connections = new ProjectExplorerEntry( + "Connections", + vscode.TreeItemCollapsibleState.Expanded, + null, + 'connection', + false + ); + connections.contextValue = "connections"; + connections.children = getComponents(components.directoryMap[DIRECTORY_MAP.CONNECTION], DIRECTORY_MAP.CONNECTION); + if (connections.children.length > 0) { + connections.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; + } + entries.push(connections); + + // ---------- Types ---------- + const types = new ProjectExplorerEntry( + "Types", + vscode.TreeItemCollapsibleState.Expanded, + null, + 'type', + false + ); + types.contextValue = "types"; + types.children = getComponents([ + ...components.directoryMap[DIRECTORY_MAP.TYPE] + ], DIRECTORY_MAP.TYPE); + if (types.children.length > 0) { + types.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; + } + entries.push(types); + + // ---------- Functions ---------- + const functions = new ProjectExplorerEntry( + "Functions", + vscode.TreeItemCollapsibleState.Expanded, + null, + 'function', + false + ); + functions.contextValue = "functions"; + functions.children = getComponents(components.directoryMap[DIRECTORY_MAP.FUNCTION], DIRECTORY_MAP.FUNCTION); + if (functions.children.length > 0) { + functions.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; + } + entries.push(functions); + + // ---------- Data Mappers ---------- + const dataMappers = new ProjectExplorerEntry( + "Data Mappers", + vscode.TreeItemCollapsibleState.Expanded, + null, + 'dataMapper', + false + ); + dataMappers.contextValue = "dataMappers"; + dataMappers.children = getComponents(components.directoryMap[DIRECTORY_MAP.DATA_MAPPER], DIRECTORY_MAP.DATA_MAPPER); + if (dataMappers.children.length > 0) { + dataMappers.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; + } + entries.push(dataMappers); + + // ---------- Configurations ---------- + const configs = new ProjectExplorerEntry( + "Configurations", + vscode.TreeItemCollapsibleState.None, + null, + 'config', + false + ); + configs.contextValue = "configurations"; + entries.push(configs); + + // ---------- Natural Functions ---------- + if (extension.isNPSupported) { + const naturalFunctions = new ProjectExplorerEntry( + "Natural Functions", + vscode.TreeItemCollapsibleState.Expanded, + null, + 'function', + false + ); + naturalFunctions.contextValue = "naturalFunctions"; + naturalFunctions.children = getComponents(components.directoryMap[DIRECTORY_MAP.NP_FUNCTION], DIRECTORY_MAP.NP_FUNCTION); + if (naturalFunctions.children.length > 0) { + naturalFunctions.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; + } + entries.push(naturalFunctions); + } + + // ---------- Local Connectors ---------- + const localConnectors = new ProjectExplorerEntry( + "Custom Connectors", + vscode.TreeItemCollapsibleState.Expanded, + null, + 'connection', + false + ); + localConnectors.contextValue = "localConnectors"; + localConnectors.children = getComponents(components.directoryMap[DIRECTORY_MAP.LOCAL_CONNECTORS], DIRECTORY_MAP.CONNECTOR); + if (localConnectors.children.length > 0) { + localConnectors.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; + } + // REMOVE THE CUSTOM CONNECTOR TREE ITEM FOR NOW + // entries.push(localConnectors); + + return entries; +} + +function getComponents(items: ProjectStructureArtifactResponse[], itemType: DIRECTORY_MAP): ProjectExplorerEntry[] { + if (!items) { + return []; + } + const entries: ProjectExplorerEntry[] = []; + const resetHistory = true; + for (const comp of items) { + if (comp.type !== itemType) { + continue; + } + const fileEntry = new ProjectExplorerEntry( + comp.name, + vscode.TreeItemCollapsibleState.None, + comp.path, + comp.icon + ); + fileEntry.command = { + "title": "Visualize", + "command": SHARED_COMMANDS.SHOW_VISUALIZER, + "arguments": [comp.path, comp.position, resetHistory] + }; + fileEntry.contextValue = itemType; + fileEntry.tooltip = comp.context; + // Get the children for services only + if (itemType === DIRECTORY_MAP.SERVICE) { + const resourceFunctions = getComponents(comp.resources, DIRECTORY_MAP.RESOURCE); + const remoteFunctions = getComponents(comp.resources, DIRECTORY_MAP.REMOTE); + fileEntry.children = [...resourceFunctions, ...remoteFunctions]; + if (fileEntry.children.length > 0) { + fileEntry.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; + } + } + entries.push(fileEntry); + } + return entries; +} + diff --git a/workspaces/wi/wi-extension/src/bi-treeview/stateMachine.ts b/workspaces/wi/wi-extension/src/bi-treeview/stateMachine.ts new file mode 100644 index 00000000000..852823f43c7 --- /dev/null +++ b/workspaces/wi/wi-extension/src/bi-treeview/stateMachine.ts @@ -0,0 +1,88 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { assign, createMachine, interpret } from 'xstate'; +import { activateProjectExplorer } from './project-explorer/activate'; +import { ext } from '../extensionVariables'; +import { fetchProjectInfo, ProjectInfo } from './utils'; + +interface MachineContext { + isBI: boolean; + isBallerina?: boolean; + isMultiRoot?: boolean; +} + +const stateMachine = createMachine({ + /** @xstate-layout N4IgpgJg5mDOIC5RilADgGwIYDsAuAdAJY5F5FYZEBeYAxBAPY5jE4BujA1qwMYAWYXlwAKAJ0YArIXgDaABgC6iUGkawyRZipAAPRACZ5ANgLyArABZjADgDMNmwYDsBp3YA0IAJ6IAjBYEAJwhQTZ+xs7GbpE2AL5xXijo2PhsmpQ09GBiEmIEmFh4AGaMYgC2BAJCohLSvHJKOmoa5NpIeoZB8gTGls5+lpaDfnZDds5evggG5s4EdvKjfn4h5qsmlglJqIVpaHUyACJgeDKQdArKHS2a7aD6COYGU4gD893RQQHOzmFW23Au1ShAAMgBlACSpDwDGYrBInB4BGSezBUJhCERjF4RS0OCuV2a6juOB0jzsdiCBBs3QGFgm5lpg1eCGMEQI-WMTMWziWQQMxkBqJBBAh0LIdByeQK2BKZUqItw6IleCxHBxeOYhKaNxJbTJHQpVJpdIC5kZzMsrL51MsBiCAzsfSCdis5mFwOVBDEYCwEG8BHYRDAAHcAEp+gN0ADyIgAogA5AD6ADVIfGAOpEvWtfHkxA2cx2ynOZ3mKwRe2s8x9AiDB1+WnyWkDLaJIEpb2+-2B4NhgCqaAgRXoTBYbCRrCVaR7AaDIdDQ5HZ3VnFxBp111U+vzRsLBj8BGcTICDtdxnk1p8iH6dgIbnkjMsdgMlMsV4SHZwjAgcB0M54MSeb3J0CAALR+PMizrMYQSWI6fLOI4rKQSsD7yM4L4vrMfizPIBiel2aQkBkVC0MBpIFggYymqMtK0valLwayER2jY8jwXMlaCtyRFogUhwNCcZwNJAlEGtRiy9PB9gWARDqHi8N4QW+x6YS+rjyJh2m2B6HaAWKGJkBJe4PP4-RmEWQRwRWd4WsYrJwfeH7RMhxhuieQT6TsxGEHO0w7iBhrmWyZYPosl6eX4cycayDjmMeHEOBMdijJYjj8aKAULmGka9qZoGPK4R5viYT5zDFto1n8D42Oy7KrK43xZd2UZ9ouy6joVIVgeadrctpzrGB5ArKdMFY9JYzz2OYnFNnBzitWkEBELAWAAEYYOJuZUfuTzfMe3lFtNtYEUE8UGJYGGRNYHkce6X5xEAA */ + id: 'bi', + initial: 'initialize', + predictableActionArguments: true, + context: { + isBI: false + }, + states: { + initialize: { + invoke: { + src: findProjectInfo, + onDone: [ + { + target: 'ready', + actions: assign({ + isBI: (context, event) => event.data.isBI, + isBallerina: (context, event) => event.data.isBallerina, + isMultiRoot: (context, event) => event.data.isMultiRoot + }) + }, + ], + onError: { + target: 'disabled' + } + } + }, + ready: { + entry: "activateExplorer" + }, + disabled: { + // define what should happen when the project is not detected + }, + } +}, { + actions: { + activateExplorer: (context, event) => { + activateProjectExplorer({ + context: ext.context, + isBI: context.isBI, + isBallerina: context.isBallerina, + isMultiRoot: context.isMultiRoot + }); + } + }, +}); + + +// Create a service to interpret the machine +export const stateService = interpret(stateMachine); + +// Define your API as functions +export const StateMachine = { + initialize: () => stateService.start() +}; + +async function findProjectInfo(): Promise { + return fetchProjectInfo(); +}; diff --git a/workspaces/wi/wi-extension/src/bi-treeview/utils.ts b/workspaces/wi/wi-extension/src/bi-treeview/utils.ts new file mode 100644 index 00000000000..07ee44bf0d8 --- /dev/null +++ b/workspaces/wi/wi-extension/src/bi-treeview/utils.ts @@ -0,0 +1,79 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Uri, Webview, workspace } from "vscode"; +import * as fs from 'fs'; +import * as path from 'path'; + +export interface ProjectInfo { + isBI: boolean; + isBallerina: boolean; + isMultiRoot: boolean; +}; + +export function getUri(webview: Webview, extensionUri: Uri, pathList: string[]) { + if (process.env.WEB_VIEW_DEV_MODE === "true") { + return new URL(pathList[pathList.length - 1], process.env.WEB_VIEW_DEV_HOST as string).href; + } + return webview.asWebviewUri(Uri.joinPath(extensionUri, ...pathList)); +} + +export function fetchProjectInfo(): ProjectInfo { + const workspaceUris = workspace.workspaceFolders ? workspace.workspaceFolders.map(folder => folder.uri) : []; + let isBICount = 0; // Counter for workspaces with isBI set to true + let isBalCount = 0; // Counter for workspaces with Ballerina project + + // Check each workspace folder's configuration for 'isBI' + for (const uri of workspaceUris) { + const isBallerina = checkIsBallerina(uri); + if (isBallerina) { + isBalCount++; + if (checkIsBI(uri)) { + isBICount++; + } + } + } + + return { + isBI: isBICount > 0, + isBallerina: isBalCount > 0, + isMultiRoot: isBalCount > 1 // Set to true only if more than one workspace has a Ballerina project + }; +} + +export function checkIsBI(uri: Uri): boolean { + const config = workspace.getConfiguration('ballerina', uri); + const inspected = config.inspect('isBI'); + // For now, assume BI is supported. This could be made configurable later. + const isBISupported = true; + + if (inspected && isBISupported) { // Added a check to see if the current version of ballerina supports bi + const valuesToCheck = [ + inspected.workspaceFolderValue, + inspected.workspaceValue, + inspected.globalValue + ]; + return valuesToCheck.find(value => value === true) !== undefined; // Return true if isBI is set to true + } + return false; // Return false if isBI is not set +} + +export function checkIsBallerina(uri: Uri): boolean { + const ballerinaTomlPath = path.join(uri.fsPath, 'Ballerina.toml'); + return fs.existsSync(ballerinaTomlPath); +} diff --git a/workspaces/wi/wi-extension/src/extension.ts b/workspaces/wi/wi-extension/src/extension.ts index f5eea5554af..a8d322bda4b 100644 --- a/workspaces/wi/wi-extension/src/extension.ts +++ b/workspaces/wi/wi-extension/src/extension.ts @@ -20,10 +20,9 @@ import * as vscode from "vscode"; import { COMMANDS, CONTEXT_KEYS, VIEWS } from "@wso2/wi-core"; import { ext } from "./extensionVariables"; import { ExtensionAPIs } from "./extensionAPIs"; -import { IntegratorTreeDataProvider } from "./treeDataProvider"; import { WebviewManager } from "./webviewManager"; -import { registerMainRpcHandlers } from "./rpc-managers/main/rpc-handler"; -import { Messenger } from "vscode-messenger"; +import { StateMachine } from "./bi-treeview/stateMachine"; +import { extension } from "./bi-treeview/biExtentionContext"; /** * Activate the extension @@ -41,25 +40,23 @@ export async function activate(context: vscode.ExtensionContext): Promise vscode.commands.executeCommand("setContext", CONTEXT_KEYS.BI_AVAILABLE, extensionAPIs.isBIAvailable()); vscode.commands.executeCommand("setContext", CONTEXT_KEYS.MI_AVAILABLE, extensionAPIs.isMIAvailable()); - // Create tree data provider - const treeDataProvider = new IntegratorTreeDataProvider(extensionAPIs); // Register tree view - const treeView = vscode.window.createTreeView(VIEWS.INTEGRATOR_EXPLORER, { - treeDataProvider, - showCollapseAll: true, - }); - context.subscriptions.push(treeView); - + // if (extensionAPIs.isBIAvailable()) { + const ballerinaExt = vscode.extensions.getExtension('wso2.ballerina'); + if (ballerinaExt) { + extension.context = context; + extension.langClient = ballerinaExt.exports.ballerinaExtInstance.langClient; + extension.biSupported = ballerinaExt.exports.ballerinaExtInstance.biSupported; + extension.isNPSupported = ballerinaExt.exports.ballerinaExtInstance.isNPSupported; + StateMachine.initialize(); + } // Create webview manager const webviewManager = new WebviewManager(extensionAPIs); context.subscriptions.push({ dispose: () => webviewManager.dispose(), }); - // Register commands - registerCommands(context, treeDataProvider, webviewManager, extensionAPIs); - ext.log("WSO2 Integrator Extension activated successfully"); } catch (error) { ext.logError("Failed to activate WSO2 Integrator Extension", error as Error); @@ -74,7 +71,6 @@ export async function activate(context: vscode.ExtensionContext): Promise */ function registerCommands( context: vscode.ExtensionContext, - treeDataProvider: IntegratorTreeDataProvider, webviewManager: WebviewManager, extensionAPIs: ExtensionAPIs, ): void { @@ -90,19 +86,6 @@ function registerCommands( }), ); - // Refresh view command - context.subscriptions.push( - vscode.commands.registerCommand(COMMANDS.REFRESH_VIEW, () => { - try { - treeDataProvider.refresh(); - vscode.window.showInformationMessage("WSO2 Integrator view refreshed"); - } catch (error) { - ext.logError("Failed to refresh view", error as Error); - vscode.window.showErrorMessage("Failed to refresh view"); - } - }), - ); - // Open BI integration command context.subscriptions.push( vscode.commands.registerCommand(COMMANDS.OPEN_BI_INTEGRATION, () => { diff --git a/workspaces/wi/wi-extension/src/treeDataProvider.ts b/workspaces/wi/wi-extension/src/treeDataProvider.ts deleted file mode 100644 index d17e985f1bf..00000000000 --- a/workspaces/wi/wi-extension/src/treeDataProvider.ts +++ /dev/null @@ -1,167 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import * as vscode from "vscode"; -import { IntegrationType } from "@wso2/wi-core"; -import type { IntegrationItem, TreeItemData } from "@wso2/wi-core"; -import { ExtensionAPIs } from "./extensionAPIs"; -import { ext } from "./extensionVariables"; - -/** - * Tree item for the integrator explorer - */ -export class IntegratorTreeItem extends vscode.TreeItem { - constructor( - public readonly label: string, - public readonly collapsibleState: vscode.TreeItemCollapsibleState, - public readonly itemData?: TreeItemData, - public readonly integrationType?: IntegrationType, - ) { - super(label, collapsibleState); - - if (itemData) { - this.description = itemData.description; - this.tooltip = itemData.tooltip || label; - this.contextValue = itemData.contextValue; - - if (itemData.command) { - this.command = { - command: itemData.command.command, - title: itemData.command.title, - arguments: itemData.command.arguments, - }; - } - - if (itemData.iconPath) { - this.iconPath = new vscode.ThemeIcon(itemData.iconPath); - } - } - } -} - -/** - * Tree data provider for the integrator explorer - */ -export class IntegratorTreeDataProvider implements vscode.TreeDataProvider { - private _onDidChangeTreeData = new vscode.EventEmitter(); - readonly onDidChangeTreeData = this._onDidChangeTreeData.event; - - constructor(private extensionAPIs: ExtensionAPIs) {} - - /** - * Refresh the tree view - */ - public refresh(): void { - this._onDidChangeTreeData.fire(); - } - - /** - * Get tree item - */ - getTreeItem(element: IntegratorTreeItem): vscode.TreeItem { - return element; - } - - /** - * Get children of a tree item - */ - async getChildren(element?: IntegratorTreeItem): Promise { - if (!element) { - // Root level - show integration types - return this.getIntegrationTypes(); - } - - if (element.integrationType) { - // Get items for specific integration type - return this.getIntegrationItems(element.integrationType); - } - - return []; - } - - /** - * Get integration types (BI and MI) - */ - private async getIntegrationTypes(): Promise { - const items: IntegratorTreeItem[] = []; - - // Add BI integration type if available - if (this.extensionAPIs.isBIAvailable()) { - items.push( - new IntegratorTreeItem( - "Ballerina Integrator (BI)", - vscode.TreeItemCollapsibleState.Collapsed, - undefined, - IntegrationType.BI, - ), - ); - } - - // Add MI integration type if available - if (this.extensionAPIs.isMIAvailable()) { - items.push( - new IntegratorTreeItem( - "Micro Integrator (MI)", - vscode.TreeItemCollapsibleState.Collapsed, - undefined, - IntegrationType.MI, - ), - ); - } - - // If no extensions available, show message - if (items.length === 0) { - const messageItem = new IntegratorTreeItem("No integrations available", vscode.TreeItemCollapsibleState.None); - messageItem.tooltip = "Install BI or MI extension to get started"; - messageItem.iconPath = new vscode.ThemeIcon("info"); - items.push(messageItem); - } - - return items; - } - - /** - * Get items for a specific integration type - */ - private async getIntegrationItems(type: IntegrationType): Promise { - try { - let items: TreeItemData[] = []; - - if (type === IntegrationType.BI) { - items = await this.extensionAPIs.getBIItems(); - } else if (type === IntegrationType.MI) { - items = await this.extensionAPIs.getMIItems(); - } - - return items.map( - (item) => - new IntegratorTreeItem( - item.label, - item.collapsibleState !== undefined - ? item.collapsibleState - : vscode.TreeItemCollapsibleState.None, - item, - type, - ), - ); - } catch (error) { - ext.logError(`Failed to get items for ${type}`, error as Error); - return []; - } - } -} From 771070c232570cec9f2855395c04b2c1d0ef4d21 Mon Sep 17 00:00:00 2001 From: kaumini Date: Fri, 7 Nov 2025 10:23:03 +0530 Subject: [PATCH 03/55] Support Bal project open --- common/config/rush/pnpm-lock.yaml | 71 ++++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 16 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index eac7e9a9009..64762612180 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -4063,30 +4063,69 @@ importers: ../../workspaces/wi/wi-extension: dependencies: + '@wso2/ballerina-core': + specifier: workspace:* + version: link:../../ballerina/ballerina-core + '@wso2/font-wso2-vscode': + specifier: workspace:* + version: link:../../common-libs/font-wso2-vscode '@wso2/wi-core': specifier: workspace:* version: link:../wi-core vscode-messenger: specifier: ~0.5.1 version: 0.5.1 + xstate: + specifier: ~4.38.3 + version: 4.38.3 devDependencies: - '@biomejs/biome': - specifier: ^1.9.4 - version: 1.9.4 + '@playwright/test': + specifier: ~1.55.1 + version: 1.55.1 + '@types/mocha': + specifier: ^10.0.3 + version: 10.0.10 '@types/node': - specifier: ^22.15.21 - version: 22.15.35 + specifier: 22.15.18 + version: 22.15.18 '@types/vscode': - specifier: ^1.100.0 + specifier: ^1.84.0 version: 1.102.0 + '@typescript-eslint/eslint-plugin': + specifier: ^6.21.0 + version: 6.21.0(@typescript-eslint/parser@8.33.1(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': + specifier: ^8.32.1 + version: 8.33.1(eslint@8.57.1)(typescript@5.8.3) + '@vscode/test-electron': + specifier: ^2.5.2 + version: 2.5.2 '@vscode/vsce': - specifier: ^3.2.1 + specifier: ^3.4.0 version: 3.4.2 - '@wso2/wi-webviews': + '@wso2/playwright-vscode-tester': specifier: workspace:* - version: link:../wi-webviews + version: link:../../common-libs/playwright-vscode-tester + copy-webpack-plugin: + specifier: ^13.0.0 + version: 13.0.0(webpack@5.101.0) + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + eslint: + specifier: ^8.57.1 + version: 8.57.1 + glob: + specifier: ^11.0.2 + version: 11.0.3 + mocha: + specifier: ^11.2.2 + version: 11.7.1 + source-map-support: + specifier: ^0.5.21 + version: 0.5.21 ts-loader: - specifier: ^9.5.1 + specifier: ^9.5.2 version: 9.5.2(typescript@5.8.3)(webpack@5.101.0) typescript: specifier: 5.8.3 @@ -4097,6 +4136,9 @@ importers: webpack-cli: specifier: ^6.0.1 version: 6.0.1(webpack@5.101.0) + webpack-permissions-plugin: + specifier: ^1.0.9 + version: 1.0.10 ../../workspaces/wi/wi-rpc-client: dependencies: @@ -25404,10 +25446,7 @@ snapshots: jest-runner: 25.5.4 jest-runtime: 25.5.4 transitivePeerDependencies: - - bufferutil - - canvas - supports-color - - utf-8-validate '@jest/test-sequencer@29.7.0': dependencies: @@ -35276,7 +35315,7 @@ snapshots: '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.101.0)': dependencies: webpack: 5.101.0(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.101.0) + webpack-cli: 6.0.1(webpack@5.101.0) '@webpack-cli/info@1.5.0(webpack-cli@4.10.0)': dependencies: @@ -35291,7 +35330,7 @@ snapshots: '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.101.0)': dependencies: webpack: 5.101.0(webpack-cli@6.0.1) - webpack-cli: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.101.0) + webpack-cli: 6.0.1(webpack@5.101.0) '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0)': dependencies: @@ -51152,7 +51191,7 @@ snapshots: watchpack: 2.4.4 webpack-sources: 3.3.3 optionalDependencies: - webpack-cli: 6.0.1(webpack-dev-server@5.2.2)(webpack@5.101.0) + webpack-cli: 6.0.1(webpack@5.101.0) transitivePeerDependencies: - '@swc/core' - esbuild From d76490cf5bb79674828938c7b12491e7ac664708 Mon Sep 17 00:00:00 2001 From: kaumini Date: Fri, 7 Nov 2025 10:23:40 +0530 Subject: [PATCH 04/55] Add treeview commands --- workspaces/wi/wi-extension/package.json | 118 +++++++++++++++++++++-- workspaces/wi/wi-extension/tsconfig.json | 1 + 2 files changed, 109 insertions(+), 10 deletions(-) diff --git a/workspaces/wi/wi-extension/package.json b/workspaces/wi/wi-extension/package.json index 8b402536f00..7a01ce5589f 100644 --- a/workspaces/wi/wi-extension/package.json +++ b/workspaces/wi/wi-extension/package.json @@ -18,7 +18,9 @@ "activationEvents": [ "onStartupFinished" ], - "extensionDependencies": [], + "extensionDependencies": [ + "wso2.ballerina" + ], "main": "./dist/extension.js", "contributes": { "viewsContainers": { @@ -70,6 +72,73 @@ } ], "menus": { + "view/item/context": [ + { + "command": "ballerina.showVisualizer", + "when": "view == wso2-integrator.explorer && viewItem == bi-project", + "group": "inline" + }, + { + "command": "ballerina.force.update.artifacts", + "when": "view == wso2-integrator.explorer && viewItem == bi-project", + "group": "inline" + }, + { + "command": "BI.project-explorer.add-connection", + "when": "view == wso2-integrator.explorer && viewItem == connections", + "group": "inline" + }, + { + "command": "BI.project-explorer.delete", + "when": "view == wso2-integrator.explorer && viewItem == CONNECTION || viewItem == SERVICE || viewItem == FUNCTION || viewItem == AUTOMATION || viewItem == TYPE || viewItem == CONFIGURABLE || viewItem == DATA_MAPPER || viewItem == NP_FUNCTION || viewItem == localConnector", + "group": "inline" + }, + { + "command": "BI.project-explorer.add-entry-point", + "when": "view == wso2-integrator.explorer && viewItem == entryPoint", + "group": "inline" + }, + { + "command": "BI.project-explorer.add-type", + "when": "view == wso2-integrator.explorer && viewItem == types", + "group": "inline" + }, + { + "command": "BI.project-explorer.view-type-diagram", + "when": "view == wso2-integrator.explorer && viewItem == types", + "group": "inline" + }, + { + "command": "BI.project-explorer.add-function", + "when": "view == wso2-integrator.explorer && viewItem == functions", + "group": "inline" + }, + { + "command": "BI.project-explorer.add-configuration", + "when": "view == wso2-integrator.explorer && viewItem == configurations", + "group": "inline" + }, + { + "command": "BI.project-explorer.view-configuration", + "when": "view == wso2-integrator.explorer && viewItem == configurations", + "group": "inline" + }, + { + "command": "BI.project-explorer.add-data-mapper", + "when": "view == wso2-integrator.explorer && viewItem == dataMappers", + "group": "inline" + }, + { + "command": "BI.project-explorer.add-natural-function", + "when": "view == wso2-integrator.explorer && viewItem == naturalFunctions", + "group": "inline" + }, + { + "command": "BI.project-explorer.add-custom-connector", + "when": "view == wso2-integrator.explorer && viewItem == localConnectors", + "group": "inline" + } + ], "view/title": [ { "command": "wso2.integrator.openWelcome", @@ -80,6 +149,21 @@ "command": "wso2.integrator.refreshView", "when": "view == wso2-integrator.explorer", "group": "navigation@2" + }, + { + "command": "BI.project-explorer.switch-project", + "when": "view == wso2-integrator.explorer && BI.isMultiRoot == true", + "group": "navigation" + }, + { + "command": "BI.project-explorer.add", + "when": "view == wso2-integrator.explorer && BI.project == true", + "group": "navigation" + }, + { + "command": "BI.project-explorer.overview", + "when": "view == wso2-integrator.explorer && BI.project == true", + "group": "navigation" } ] } @@ -96,18 +180,32 @@ "package": "vsce package" }, "devDependencies": { - "@biomejs/biome": "^1.9.4", - "@types/node": "^22.15.21", - "@types/vscode": "^1.100.0", - "ts-loader": "^9.5.1", + "@vscode/vsce": "^3.4.0", + "@types/vscode": "^1.84.0", + "@types/mocha": "^10.0.3", + "@types/node": "22.15.18", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^8.32.1", + "@vscode/test-electron": "^2.5.2", + "eslint": "^8.57.1", + "glob": "^11.0.2", + "mocha": "^11.2.2", "typescript": "5.8.3", - "webpack": "^5.97.1", + "copyfiles": "^2.4.1", + "copy-webpack-plugin": "^13.0.0", + "source-map-support": "^0.5.21", + "ts-loader": "^9.5.2", + "webpack": "^5.99.8", "webpack-cli": "^6.0.1", - "@vscode/vsce": "^3.2.1", - "@wso2/wi-webviews": "workspace:*" + "webpack-permissions-plugin": "^1.0.9", + "@playwright/test": "~1.55.1", + "@wso2/playwright-vscode-tester": "workspace:*" }, "dependencies": { "@wso2/wi-core": "workspace:*", - "vscode-messenger": "~0.5.1" + "vscode-messenger": "~0.5.1", + "@wso2/ballerina-core": "workspace:*", + "@wso2/font-wso2-vscode": "workspace:*", + "xstate": "~4.38.3" } -} +} \ No newline at end of file diff --git a/workspaces/wi/wi-extension/tsconfig.json b/workspaces/wi/wi-extension/tsconfig.json index d6ac62ad836..9f26e6d7361 100644 --- a/workspaces/wi/wi-extension/tsconfig.json +++ b/workspaces/wi/wi-extension/tsconfig.json @@ -6,6 +6,7 @@ "outDir": "./dist", "rootDir": "./src", "strict": true, + "strictNullChecks": false, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, From 77864b77573e52bedb95f37ffb0827029e54ed5c Mon Sep 17 00:00:00 2001 From: kaumini Date: Fri, 7 Nov 2025 10:53:06 +0530 Subject: [PATCH 05/55] Render Bi treeview and webviews if bal projecct --- workspaces/wi/wi-extension/src/extension.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/workspaces/wi/wi-extension/src/extension.ts b/workspaces/wi/wi-extension/src/extension.ts index a8d322bda4b..73ce8d7f171 100644 --- a/workspaces/wi/wi-extension/src/extension.ts +++ b/workspaces/wi/wi-extension/src/extension.ts @@ -23,6 +23,7 @@ import { ExtensionAPIs } from "./extensionAPIs"; import { WebviewManager } from "./webviewManager"; import { StateMachine } from "./bi-treeview/stateMachine"; import { extension } from "./bi-treeview/biExtentionContext"; +import { fetchProjectInfo } from "./bi-treeview/utils"; /** * Activate the extension @@ -44,7 +45,8 @@ export async function activate(context: vscode.ExtensionContext): Promise // Register tree view // if (extensionAPIs.isBIAvailable()) { const ballerinaExt = vscode.extensions.getExtension('wso2.ballerina'); - if (ballerinaExt) { + const isBalProject = fetchProjectInfo().isBallerina; + if (ballerinaExt && isBalProject) { extension.context = context; extension.langClient = ballerinaExt.exports.ballerinaExtInstance.langClient; extension.biSupported = ballerinaExt.exports.ballerinaExtInstance.biSupported; From 6a71aaa379cedfe7241305cd2801bcc6e69795ac Mon Sep 17 00:00:00 2001 From: kaumini Date: Fri, 7 Nov 2025 10:54:21 +0530 Subject: [PATCH 06/55] Add svgs and codicons --- .../wi/wi-extension/assets/ballerina.svg | 39 + workspaces/wi/wi-extension/assets/bi-logo.svg | 65 + .../wi-extension/assets/dark-APIResource.svg | 21 + .../wi/wi-extension/assets/dark-Sequence.svg | 24 + .../assets/dark-address-endpoint-template.svg | 7 + .../assets/dark-address-endpoint.svg | 5 + .../wi-extension/assets/dark-arrow-swap.svg | 1 + .../wi-extension/assets/dark-bi-ai-agent.svg | 22 + .../wi/wi-extension/assets/dark-bi-asb.svg | 18 + .../wi/wi-extension/assets/dark-bi-config.svg | 23 + .../assets/dark-bi-connection.svg | 21 + .../wi/wi-extension/assets/dark-bi-file.svg | 18 + .../wi/wi-extension/assets/dark-bi-ftp.svg | 18 + .../wi-extension/assets/dark-bi-function.svg | 21 + .../wi/wi-extension/assets/dark-bi-github.svg | 21 + .../wi/wi-extension/assets/dark-bi-globe.svg | 21 + .../wi-extension/assets/dark-bi-graphql.svg | 20 + .../wi/wi-extension/assets/dark-bi-grpc.svg | 20 + .../assets/dark-bi-http-service.svg | 21 + .../wi/wi-extension/assets/dark-bi-java.svg | 20 + .../wi/wi-extension/assets/dark-bi-kafka.svg | 20 + .../wi/wi-extension/assets/dark-bi-mqtt.svg | 20 + .../wi/wi-extension/assets/dark-bi-nats.svg | 20 + .../wi-extension/assets/dark-bi-rabbitmq.svg | 20 + .../assets/dark-bi-salesforce.svg | 18 + .../wi/wi-extension/assets/dark-bi-task.svg | 21 + .../wi/wi-extension/assets/dark-bi-tcp.svg | 18 + .../wi/wi-extension/assets/dark-bi-type.svg | 22 + .../wi-extension/assets/dark-class-icon.svg | 82 + .../wi/wi-extension/assets/dark-config.svg | 23 + .../wi-extension/assets/dark-connection.svg | 21 + .../assets/dark-custom-message-processor.svg | 12 + .../assets/dark-custom-message-store.svg | 8 + .../assets/dark-cxf-ws-rm-endpoint.svg | 13 + .../wi-extension/assets/dark-data-service.svg | 4 + .../wi-extension/assets/dark-data-source.svg | 7 + .../wi-extension/assets/dark-dataMapper.svg | 28 + .../wi/wi-extension/assets/dark-database.svg | 1 + .../assets/dark-default-endpoint-template.svg | 6 + .../assets/dark-default-endpoint.svg | 4 + .../wi-extension/assets/dark-delete-api.svg | 9 + .../wi/wi-extension/assets/dark-endpoint.svg | 23 + .../assets/dark-failover-endpoint.svg | 8 + .../assets/dark-feed-endpoint.svg | 8 + .../assets/dark-file-endpoint.svg | 7 + .../wi/wi-extension/assets/dark-file.svg | 1 + .../wi/wi-extension/assets/dark-fold-down.svg | 1 + .../wi/wi-extension/assets/dark-function.svg | 21 + .../wi/wi-extension/assets/dark-gear.svg | 1 + .../wi/wi-extension/assets/dark-get-api.svg | 6 + .../wi/wi-extension/assets/dark-globe.svg | 1 + .../wi/wi-extension/assets/dark-head-api.svg | 7 + .../wi-extension/assets/dark-hl7-endpoint.svg | 8 + .../assets/dark-http-endpoint-template.svg | 11 + .../assets/dark-http-endpoint.svg | 8 + .../assets/dark-http-inbound-endpoint.svg | 9 + .../wi-extension/assets/dark-http-service.svg | 21 + .../assets/dark-https-endpoint.svg | 10 + .../wi/wi-extension/assets/dark-icon.svg | 67 + .../assets/dark-in-memory-message-store.svg | 10 + .../assets/dark-inbound-endpoint.svg | 22 + .../assets/dark-jdbc-message-store.svg | 9 + .../wi-extension/assets/dark-jms-endpoint.svg | 51 + .../assets/dark-jms-message-store.svg | 52 + .../assets/dark-kafka-endpoint.svg | 6 + .../wi-extension/assets/dark-list-ordered.svg | 1 + .../assets/dark-load-balance-endpoint.svg | 10 + .../wi-extension/assets/dark-local-entry.svg | 21 + .../assets/dark-message-processor.svg | 22 + .../dark-message-sampling-processor.svg | 12 + .../assets/dark-message-store.svg | 9 + .../assets/dark-mqtt-endpoint.svg | 9 + .../wi-extension/assets/dark-options-api.svg | 10 + .../wi/wi-extension/assets/dark-patch-api.svg | 8 + .../wi/wi-extension/assets/dark-plug.svg | 1 + .../wi/wi-extension/assets/dark-post-api.svg | 7 + .../wi/wi-extension/assets/dark-project.svg | 7 + .../wi/wi-extension/assets/dark-put-api.svg | 6 + .../wi/wi-extension/assets/dark-rabbit-mq.svg | 6 + .../assets/dark-rabbitmq-endpoint.svg | 6 + .../wi/wi-extension/assets/dark-radio.svg | 25 + .../assets/dark-recipient-list-endpoint.svg | 10 + .../wi/wi-extension/assets/dark-registry.svg | 25 + .../assets/dark-resequence-message-store.svg | 11 + ...-failover-message-forwarding-processor.svg | 12 + ...scheduled-message-forwarding-processor.svg | 12 + .../assets/dark-sequence-template.svg | 6 + .../wi/wi-extension/assets/dark-settings.svg | 1 + .../wi/wi-extension/assets/dark-start.svg | 20 + .../wi/wi-extension/assets/dark-task.svg | 21 + .../wi/wi-extension/assets/dark-tasklist.svg | 1 + .../assets/dark-template-endpoint.svg | 8 + .../wi/wi-extension/assets/dark-template.svg | 23 + .../assets/dark-type-hierarchy.svg | 1 + .../wi/wi-extension/assets/dark-type.svg | 21 + .../assets/dark-user-defined-endpoint.svg | 7 + .../wi-extension/assets/dark-ws-endpoint.svg | 16 + .../assets/dark-wsdl-endpoint-template.svg | 11 + .../assets/dark-wsdl-endpoint.svg | 8 + .../assets/dark-wso2-mb-message-store.svg | 9 + .../wi-extension/assets/dark-wss-endpoint.svg | 8 + workspaces/wi/wi-extension/assets/icon.svg | 67 + .../wi-extension/assets/light-APIResource.svg | 21 + .../wi/wi-extension/assets/light-Sequence.svg | 24 + .../light-address-endpoint-template.svg | 7 + .../assets/light-address-endpoint.svg | 5 + .../wi-extension/assets/light-arrow-swap.svg | 1 + .../wi-extension/assets/light-bi-ai-agent.svg | 22 + .../wi/wi-extension/assets/light-bi-asb.svg | 19 + .../wi-extension/assets/light-bi-config.svg | 23 + .../assets/light-bi-connection.svg | 21 + .../wi/wi-extension/assets/light-bi-file.svg | 18 + .../wi/wi-extension/assets/light-bi-ftp.svg | 18 + .../wi-extension/assets/light-bi-function.svg | 21 + .../wi-extension/assets/light-bi-github.svg | 21 + .../wi/wi-extension/assets/light-bi-globe.svg | 21 + .../wi-extension/assets/light-bi-graphql.svg | 20 + .../wi/wi-extension/assets/light-bi-grpc.svg | 20 + .../assets/light-bi-http-service.svg | 21 + .../wi/wi-extension/assets/light-bi-java.svg | 20 + .../wi/wi-extension/assets/light-bi-kafka.svg | 20 + .../wi/wi-extension/assets/light-bi-mqtt.svg | 20 + .../wi/wi-extension/assets/light-bi-nats.svg | 20 + .../wi-extension/assets/light-bi-rabbitmq.svg | 20 + .../assets/light-bi-salesforce.svg | 18 + .../wi/wi-extension/assets/light-bi-task.svg | 21 + .../wi/wi-extension/assets/light-bi-tcp.svg | 19 + .../wi/wi-extension/assets/light-bi-type.svg | 22 + .../wi-extension/assets/light-class-icon.svg | 65 + .../wi/wi-extension/assets/light-config.svg | 23 + .../wi-extension/assets/light-connection.svg | 21 + .../assets/light-custom-message-processor.svg | 12 + .../assets/light-custom-message-store.svg | 8 + .../assets/light-cxf-ws-rm-endpoint.svg | 13 + .../assets/light-data-service.svg | 4 + .../wi-extension/assets/light-data-source.svg | 7 + .../wi-extension/assets/light-dataMapper.svg | 45 + .../wi/wi-extension/assets/light-database.svg | 1 + .../light-default-endpoint-template.svg | 6 + .../assets/light-default-endpoint.svg | 4 + .../wi-extension/assets/light-delete-api.svg | 9 + .../wi/wi-extension/assets/light-endpoint.svg | 23 + .../assets/light-failover-endpoint.svg | 8 + .../assets/light-feed-endpoint.svg | 8 + .../assets/light-file-endpoint.svg | 7 + .../wi/wi-extension/assets/light-file.svg | 1 + .../wi-extension/assets/light-fold-down.svg | 1 + .../wi/wi-extension/assets/light-function.svg | 21 + .../wi/wi-extension/assets/light-gear.svg | 1 + .../wi/wi-extension/assets/light-get-api.svg | 6 + .../wi/wi-extension/assets/light-globe.svg | 1 + .../wi/wi-extension/assets/light-head-api.svg | 7 + .../assets/light-hl7-endpoint.svg | 8 + .../assets/light-http-endpoint-template.svg | 11 + .../assets/light-http-endpoint.svg | 8 + .../assets/light-http-inbound-endpoint.svg | 9 + .../assets/light-http-service.svg | 21 + .../assets/light-https-endpoint.svg | 10 + .../wi/wi-extension/assets/light-icon.svg | 67 + .../assets/light-in-memory-message-store.svg | 10 + .../assets/light-inbound-endpoint.svg | 22 + .../assets/light-jdbc-message-store.svg | 9 + .../assets/light-jms-endpoint.svg | 51 + .../assets/light-jms-message-store.svg | 52 + .../assets/light-kafka-endpoint.svg | 6 + .../assets/light-list-ordered.svg | 1 + .../assets/light-load-balance-endpoint.svg | 10 + .../wi-extension/assets/light-local-entry.svg | 21 + .../assets/light-message-processor.svg | 22 + .../light-message-sampling-processor.svg | 12 + .../assets/light-message-store.svg | 9 + .../assets/light-mqtt-endpoint.svg | 9 + .../wi-extension/assets/light-options-api.svg | 10 + .../wi-extension/assets/light-patch-api.svg | 8 + .../wi/wi-extension/assets/light-plug.svg | 1 + .../wi/wi-extension/assets/light-post-api.svg | 7 + .../wi/wi-extension/assets/light-project.svg | 7 + .../wi/wi-extension/assets/light-put-api.svg | 6 + .../wi-extension/assets/light-rabbit-mq.svg | 6 + .../assets/light-rabbitmq-endpoint.svg | 6 + .../wi/wi-extension/assets/light-radio.svg | 25 + .../assets/light-recipient-list-endpoint.svg | 10 + .../wi/wi-extension/assets/light-registry.svg | 42 + .../assets/light-resequence-message-store.svg | 11 + ...-failover-message-forwarding-processor.svg | 12 + ...scheduled-message-forwarding-processor.svg | 12 + .../assets/light-sequence-template.svg | 6 + .../wi/wi-extension/assets/light-settings.svg | 1 + .../wi/wi-extension/assets/light-start.svg | 20 + .../wi/wi-extension/assets/light-task.svg | 21 + .../wi/wi-extension/assets/light-tasklist.svg | 1 + .../assets/light-template-endpoint.svg | 8 + .../wi/wi-extension/assets/light-template.svg | 23 + .../assets/light-type-hierarchy.svg | 1 + .../wi/wi-extension/assets/light-type.svg | 21 + .../assets/light-user-defined-endpoint.svg | 7 + .../wi-extension/assets/light-ws-endpoint.svg | 16 + .../assets/light-wsdl-endpoint-template.svg | 11 + .../assets/light-wsdl-endpoint.svg | 8 + .../assets/light-wso2-mb-message-store.svg | 9 + .../assets/light-wss-endpoint.svg | 8 + .../resources/codicons/codicon.css | 571 +++ .../resources/codicons/codicon.csv | 421 ++ .../resources/codicons/codicon.html | 3871 +++++++++++++++++ .../resources/codicons/codicon.svg | 1 + .../resources/codicons/codicon.ttf | Bin 0 -> 72504 bytes 206 files changed, 7970 insertions(+) create mode 100644 workspaces/wi/wi-extension/assets/ballerina.svg create mode 100644 workspaces/wi/wi-extension/assets/bi-logo.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-APIResource.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-Sequence.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-address-endpoint-template.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-address-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-arrow-swap.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-ai-agent.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-asb.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-config.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-connection.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-file.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-ftp.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-function.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-github.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-globe.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-graphql.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-grpc.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-http-service.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-java.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-kafka.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-mqtt.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-nats.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-rabbitmq.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-salesforce.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-task.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-tcp.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-bi-type.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-class-icon.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-config.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-connection.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-custom-message-processor.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-custom-message-store.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-cxf-ws-rm-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-data-service.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-data-source.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-dataMapper.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-database.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-default-endpoint-template.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-default-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-delete-api.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-failover-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-feed-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-file-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-file.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-fold-down.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-function.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-gear.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-get-api.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-globe.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-head-api.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-hl7-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-http-endpoint-template.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-http-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-http-inbound-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-http-service.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-https-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-icon.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-in-memory-message-store.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-inbound-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-jdbc-message-store.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-jms-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-jms-message-store.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-kafka-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-list-ordered.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-load-balance-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-local-entry.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-message-processor.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-message-sampling-processor.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-message-store.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-mqtt-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-options-api.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-patch-api.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-plug.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-post-api.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-project.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-put-api.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-rabbit-mq.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-rabbitmq-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-radio.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-recipient-list-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-registry.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-resequence-message-store.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-scheduled-failover-message-forwarding-processor.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-scheduled-message-forwarding-processor.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-sequence-template.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-settings.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-start.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-task.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-tasklist.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-template-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-template.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-type-hierarchy.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-type.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-user-defined-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-ws-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-wsdl-endpoint-template.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-wsdl-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-wso2-mb-message-store.svg create mode 100644 workspaces/wi/wi-extension/assets/dark-wss-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/icon.svg create mode 100644 workspaces/wi/wi-extension/assets/light-APIResource.svg create mode 100644 workspaces/wi/wi-extension/assets/light-Sequence.svg create mode 100644 workspaces/wi/wi-extension/assets/light-address-endpoint-template.svg create mode 100644 workspaces/wi/wi-extension/assets/light-address-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-arrow-swap.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-ai-agent.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-asb.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-config.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-connection.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-file.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-ftp.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-function.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-github.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-globe.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-graphql.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-grpc.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-http-service.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-java.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-kafka.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-mqtt.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-nats.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-rabbitmq.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-salesforce.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-task.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-tcp.svg create mode 100644 workspaces/wi/wi-extension/assets/light-bi-type.svg create mode 100644 workspaces/wi/wi-extension/assets/light-class-icon.svg create mode 100644 workspaces/wi/wi-extension/assets/light-config.svg create mode 100644 workspaces/wi/wi-extension/assets/light-connection.svg create mode 100644 workspaces/wi/wi-extension/assets/light-custom-message-processor.svg create mode 100644 workspaces/wi/wi-extension/assets/light-custom-message-store.svg create mode 100644 workspaces/wi/wi-extension/assets/light-cxf-ws-rm-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-data-service.svg create mode 100644 workspaces/wi/wi-extension/assets/light-data-source.svg create mode 100644 workspaces/wi/wi-extension/assets/light-dataMapper.svg create mode 100644 workspaces/wi/wi-extension/assets/light-database.svg create mode 100644 workspaces/wi/wi-extension/assets/light-default-endpoint-template.svg create mode 100644 workspaces/wi/wi-extension/assets/light-default-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-delete-api.svg create mode 100644 workspaces/wi/wi-extension/assets/light-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-failover-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-feed-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-file-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-file.svg create mode 100644 workspaces/wi/wi-extension/assets/light-fold-down.svg create mode 100644 workspaces/wi/wi-extension/assets/light-function.svg create mode 100644 workspaces/wi/wi-extension/assets/light-gear.svg create mode 100644 workspaces/wi/wi-extension/assets/light-get-api.svg create mode 100644 workspaces/wi/wi-extension/assets/light-globe.svg create mode 100644 workspaces/wi/wi-extension/assets/light-head-api.svg create mode 100644 workspaces/wi/wi-extension/assets/light-hl7-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-http-endpoint-template.svg create mode 100644 workspaces/wi/wi-extension/assets/light-http-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-http-inbound-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-http-service.svg create mode 100644 workspaces/wi/wi-extension/assets/light-https-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-icon.svg create mode 100644 workspaces/wi/wi-extension/assets/light-in-memory-message-store.svg create mode 100644 workspaces/wi/wi-extension/assets/light-inbound-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-jdbc-message-store.svg create mode 100644 workspaces/wi/wi-extension/assets/light-jms-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-jms-message-store.svg create mode 100644 workspaces/wi/wi-extension/assets/light-kafka-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-list-ordered.svg create mode 100644 workspaces/wi/wi-extension/assets/light-load-balance-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-local-entry.svg create mode 100644 workspaces/wi/wi-extension/assets/light-message-processor.svg create mode 100644 workspaces/wi/wi-extension/assets/light-message-sampling-processor.svg create mode 100644 workspaces/wi/wi-extension/assets/light-message-store.svg create mode 100644 workspaces/wi/wi-extension/assets/light-mqtt-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-options-api.svg create mode 100644 workspaces/wi/wi-extension/assets/light-patch-api.svg create mode 100644 workspaces/wi/wi-extension/assets/light-plug.svg create mode 100644 workspaces/wi/wi-extension/assets/light-post-api.svg create mode 100644 workspaces/wi/wi-extension/assets/light-project.svg create mode 100644 workspaces/wi/wi-extension/assets/light-put-api.svg create mode 100644 workspaces/wi/wi-extension/assets/light-rabbit-mq.svg create mode 100644 workspaces/wi/wi-extension/assets/light-rabbitmq-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-radio.svg create mode 100644 workspaces/wi/wi-extension/assets/light-recipient-list-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-registry.svg create mode 100644 workspaces/wi/wi-extension/assets/light-resequence-message-store.svg create mode 100644 workspaces/wi/wi-extension/assets/light-scheduled-failover-message-forwarding-processor.svg create mode 100644 workspaces/wi/wi-extension/assets/light-scheduled-message-forwarding-processor.svg create mode 100644 workspaces/wi/wi-extension/assets/light-sequence-template.svg create mode 100644 workspaces/wi/wi-extension/assets/light-settings.svg create mode 100644 workspaces/wi/wi-extension/assets/light-start.svg create mode 100644 workspaces/wi/wi-extension/assets/light-task.svg create mode 100644 workspaces/wi/wi-extension/assets/light-tasklist.svg create mode 100644 workspaces/wi/wi-extension/assets/light-template-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-template.svg create mode 100644 workspaces/wi/wi-extension/assets/light-type-hierarchy.svg create mode 100644 workspaces/wi/wi-extension/assets/light-type.svg create mode 100644 workspaces/wi/wi-extension/assets/light-user-defined-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-ws-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-wsdl-endpoint-template.svg create mode 100644 workspaces/wi/wi-extension/assets/light-wsdl-endpoint.svg create mode 100644 workspaces/wi/wi-extension/assets/light-wso2-mb-message-store.svg create mode 100644 workspaces/wi/wi-extension/assets/light-wss-endpoint.svg create mode 100644 workspaces/wi/wi-extension/resources/codicons/codicon.css create mode 100644 workspaces/wi/wi-extension/resources/codicons/codicon.csv create mode 100644 workspaces/wi/wi-extension/resources/codicons/codicon.html create mode 100644 workspaces/wi/wi-extension/resources/codicons/codicon.svg create mode 100644 workspaces/wi/wi-extension/resources/codicons/codicon.ttf diff --git a/workspaces/wi/wi-extension/assets/ballerina.svg b/workspaces/wi/wi-extension/assets/ballerina.svg new file mode 100644 index 00000000000..9f7681ed841 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/ballerina.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/bi-logo.svg b/workspaces/wi/wi-extension/assets/bi-logo.svg new file mode 100644 index 00000000000..070bd40b9c0 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/bi-logo.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-APIResource.svg b/workspaces/wi/wi-extension/assets/dark-APIResource.svg new file mode 100644 index 00000000000..448df39dc88 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-APIResource.svg @@ -0,0 +1,21 @@ + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-Sequence.svg b/workspaces/wi/wi-extension/assets/dark-Sequence.svg new file mode 100644 index 00000000000..9ed7d58f79f --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-Sequence.svg @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-address-endpoint-template.svg b/workspaces/wi/wi-extension/assets/dark-address-endpoint-template.svg new file mode 100644 index 00000000000..3ec8e957706 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-address-endpoint-template.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-address-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-address-endpoint.svg new file mode 100644 index 00000000000..c354fffec38 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-address-endpoint.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-arrow-swap.svg b/workspaces/wi/wi-extension/assets/dark-arrow-swap.svg new file mode 100644 index 00000000000..051a67580dc --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-arrow-swap.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-bi-ai-agent.svg b/workspaces/wi/wi-extension/assets/dark-bi-ai-agent.svg new file mode 100644 index 00000000000..b75203cb736 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-ai-agent.svg @@ -0,0 +1,22 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-bi-asb.svg b/workspaces/wi/wi-extension/assets/dark-bi-asb.svg new file mode 100644 index 00000000000..37ef5e0b564 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-asb.svg @@ -0,0 +1,18 @@ + + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-bi-config.svg b/workspaces/wi/wi-extension/assets/dark-bi-config.svg new file mode 100644 index 00000000000..d12cd2e718a --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-config.svg @@ -0,0 +1,23 @@ + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-bi-connection.svg b/workspaces/wi/wi-extension/assets/dark-bi-connection.svg new file mode 100644 index 00000000000..798e6122efe --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-connection.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-bi-file.svg b/workspaces/wi/wi-extension/assets/dark-bi-file.svg new file mode 100644 index 00000000000..b6a730a93ad --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-file.svg @@ -0,0 +1,18 @@ + + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-bi-ftp.svg b/workspaces/wi/wi-extension/assets/dark-bi-ftp.svg new file mode 100644 index 00000000000..23a335d43d3 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-ftp.svg @@ -0,0 +1,18 @@ + + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-bi-function.svg b/workspaces/wi/wi-extension/assets/dark-bi-function.svg new file mode 100644 index 00000000000..f5f7a0c0d45 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-function.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-bi-github.svg b/workspaces/wi/wi-extension/assets/dark-bi-github.svg new file mode 100644 index 00000000000..5f64aaf67b4 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-github.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-bi-globe.svg b/workspaces/wi/wi-extension/assets/dark-bi-globe.svg new file mode 100644 index 00000000000..43995c4ae6d --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-globe.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-bi-graphql.svg b/workspaces/wi/wi-extension/assets/dark-bi-graphql.svg new file mode 100644 index 00000000000..3cf318fe05b --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-graphql.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-bi-grpc.svg b/workspaces/wi/wi-extension/assets/dark-bi-grpc.svg new file mode 100644 index 00000000000..cfca9ebe624 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-grpc.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-bi-http-service.svg b/workspaces/wi/wi-extension/assets/dark-bi-http-service.svg new file mode 100644 index 00000000000..fb3f7601169 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-http-service.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-bi-java.svg b/workspaces/wi/wi-extension/assets/dark-bi-java.svg new file mode 100644 index 00000000000..94c2b837373 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-java.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-bi-kafka.svg b/workspaces/wi/wi-extension/assets/dark-bi-kafka.svg new file mode 100644 index 00000000000..190e06c4b27 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-kafka.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-bi-mqtt.svg b/workspaces/wi/wi-extension/assets/dark-bi-mqtt.svg new file mode 100644 index 00000000000..78287f98006 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-mqtt.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-bi-nats.svg b/workspaces/wi/wi-extension/assets/dark-bi-nats.svg new file mode 100644 index 00000000000..4fab39a8261 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-nats.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-bi-rabbitmq.svg b/workspaces/wi/wi-extension/assets/dark-bi-rabbitmq.svg new file mode 100644 index 00000000000..9fc0f1bcab7 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-rabbitmq.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-bi-salesforce.svg b/workspaces/wi/wi-extension/assets/dark-bi-salesforce.svg new file mode 100644 index 00000000000..3bef27e967e --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-salesforce.svg @@ -0,0 +1,18 @@ + + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-bi-task.svg b/workspaces/wi/wi-extension/assets/dark-bi-task.svg new file mode 100644 index 00000000000..fd0b96d5eb0 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-task.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-bi-tcp.svg b/workspaces/wi/wi-extension/assets/dark-bi-tcp.svg new file mode 100644 index 00000000000..9379adb7c8f --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-tcp.svg @@ -0,0 +1,18 @@ + + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-bi-type.svg b/workspaces/wi/wi-extension/assets/dark-bi-type.svg new file mode 100644 index 00000000000..862db3fa6c9 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-bi-type.svg @@ -0,0 +1,22 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-class-icon.svg b/workspaces/wi/wi-extension/assets/dark-class-icon.svg new file mode 100644 index 00000000000..f6fb0482ca0 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-class-icon.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-config.svg b/workspaces/wi/wi-extension/assets/dark-config.svg new file mode 100644 index 00000000000..d12cd2e718a --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-config.svg @@ -0,0 +1,23 @@ + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-connection.svg b/workspaces/wi/wi-extension/assets/dark-connection.svg new file mode 100644 index 00000000000..798e6122efe --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-connection.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-custom-message-processor.svg b/workspaces/wi/wi-extension/assets/dark-custom-message-processor.svg new file mode 100644 index 00000000000..87de2627f85 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-custom-message-processor.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-custom-message-store.svg b/workspaces/wi/wi-extension/assets/dark-custom-message-store.svg new file mode 100644 index 00000000000..23e5a420335 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-custom-message-store.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-cxf-ws-rm-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-cxf-ws-rm-endpoint.svg new file mode 100644 index 00000000000..fca53c2e027 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-cxf-ws-rm-endpoint.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-data-service.svg b/workspaces/wi/wi-extension/assets/dark-data-service.svg new file mode 100644 index 00000000000..fdd107b5126 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-data-service.svg @@ -0,0 +1,4 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-data-source.svg b/workspaces/wi/wi-extension/assets/dark-data-source.svg new file mode 100644 index 00000000000..7a1bed9990a --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-data-source.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-dataMapper.svg b/workspaces/wi/wi-extension/assets/dark-dataMapper.svg new file mode 100644 index 00000000000..b503f01777c --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-dataMapper.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-database.svg b/workspaces/wi/wi-extension/assets/dark-database.svg new file mode 100644 index 00000000000..6109d72a990 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-database.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-default-endpoint-template.svg b/workspaces/wi/wi-extension/assets/dark-default-endpoint-template.svg new file mode 100644 index 00000000000..f334f33d0df --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-default-endpoint-template.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-default-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-default-endpoint.svg new file mode 100644 index 00000000000..70e2a5744da --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-default-endpoint.svg @@ -0,0 +1,4 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-delete-api.svg b/workspaces/wi/wi-extension/assets/dark-delete-api.svg new file mode 100644 index 00000000000..3a5bde808ab --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-delete-api.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-endpoint.svg new file mode 100644 index 00000000000..c11cac8e400 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-endpoint.svg @@ -0,0 +1,23 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-failover-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-failover-endpoint.svg new file mode 100644 index 00000000000..df84e19a216 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-failover-endpoint.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-feed-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-feed-endpoint.svg new file mode 100644 index 00000000000..7cbf792e972 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-feed-endpoint.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-file-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-file-endpoint.svg new file mode 100644 index 00000000000..f6f22dea8ad --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-file-endpoint.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-file.svg b/workspaces/wi/wi-extension/assets/dark-file.svg new file mode 100644 index 00000000000..c1da0d556a0 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-fold-down.svg b/workspaces/wi/wi-extension/assets/dark-fold-down.svg new file mode 100644 index 00000000000..44393fb1af5 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-fold-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-function.svg b/workspaces/wi/wi-extension/assets/dark-function.svg new file mode 100644 index 00000000000..f5f7a0c0d45 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-function.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-gear.svg b/workspaces/wi/wi-extension/assets/dark-gear.svg new file mode 100644 index 00000000000..b3467c84c7c --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-gear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-get-api.svg b/workspaces/wi/wi-extension/assets/dark-get-api.svg new file mode 100644 index 00000000000..d2b111b7fbf --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-get-api.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-globe.svg b/workspaces/wi/wi-extension/assets/dark-globe.svg new file mode 100644 index 00000000000..702f17e98ad --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-head-api.svg b/workspaces/wi/wi-extension/assets/dark-head-api.svg new file mode 100644 index 00000000000..73327c9395d --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-head-api.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-hl7-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-hl7-endpoint.svg new file mode 100644 index 00000000000..5eb42ec74b1 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-hl7-endpoint.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-http-endpoint-template.svg b/workspaces/wi/wi-extension/assets/dark-http-endpoint-template.svg new file mode 100644 index 00000000000..fcde650c0ca --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-http-endpoint-template.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-http-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-http-endpoint.svg new file mode 100644 index 00000000000..648617b389e --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-http-endpoint.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-http-inbound-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-http-inbound-endpoint.svg new file mode 100644 index 00000000000..ee7ef65fcae --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-http-inbound-endpoint.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-http-service.svg b/workspaces/wi/wi-extension/assets/dark-http-service.svg new file mode 100644 index 00000000000..fb3f7601169 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-http-service.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-https-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-https-endpoint.svg new file mode 100644 index 00000000000..167e6302a21 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-https-endpoint.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-icon.svg b/workspaces/wi/wi-extension/assets/dark-icon.svg new file mode 100644 index 00000000000..9dba7b37e67 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-icon.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-in-memory-message-store.svg b/workspaces/wi/wi-extension/assets/dark-in-memory-message-store.svg new file mode 100644 index 00000000000..43554cd9fec --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-in-memory-message-store.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-inbound-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-inbound-endpoint.svg new file mode 100644 index 00000000000..a11ee6b08b7 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-inbound-endpoint.svg @@ -0,0 +1,22 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-jdbc-message-store.svg b/workspaces/wi/wi-extension/assets/dark-jdbc-message-store.svg new file mode 100644 index 00000000000..ea76bc16695 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-jdbc-message-store.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-jms-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-jms-endpoint.svg new file mode 100644 index 00000000000..0d5435e824c --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-jms-endpoint.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-jms-message-store.svg b/workspaces/wi/wi-extension/assets/dark-jms-message-store.svg new file mode 100644 index 00000000000..579f4c78ddd --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-jms-message-store.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-kafka-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-kafka-endpoint.svg new file mode 100644 index 00000000000..045eb1b3ce7 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-kafka-endpoint.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-list-ordered.svg b/workspaces/wi/wi-extension/assets/dark-list-ordered.svg new file mode 100644 index 00000000000..8ab2773f39d --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-list-ordered.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-load-balance-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-load-balance-endpoint.svg new file mode 100644 index 00000000000..5c572b5a750 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-load-balance-endpoint.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-local-entry.svg b/workspaces/wi/wi-extension/assets/dark-local-entry.svg new file mode 100644 index 00000000000..6f2f426fbbe --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-local-entry.svg @@ -0,0 +1,21 @@ + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-message-processor.svg b/workspaces/wi/wi-extension/assets/dark-message-processor.svg new file mode 100644 index 00000000000..b56f06b4454 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-message-processor.svg @@ -0,0 +1,22 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-message-sampling-processor.svg b/workspaces/wi/wi-extension/assets/dark-message-sampling-processor.svg new file mode 100644 index 00000000000..1bd23ef9860 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-message-sampling-processor.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-message-store.svg b/workspaces/wi/wi-extension/assets/dark-message-store.svg new file mode 100644 index 00000000000..4023a385878 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-message-store.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-mqtt-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-mqtt-endpoint.svg new file mode 100644 index 00000000000..9a5754a2426 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-mqtt-endpoint.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-options-api.svg b/workspaces/wi/wi-extension/assets/dark-options-api.svg new file mode 100644 index 00000000000..9d000f3353c --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-options-api.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-patch-api.svg b/workspaces/wi/wi-extension/assets/dark-patch-api.svg new file mode 100644 index 00000000000..8cf8fcdc14b --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-patch-api.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-plug.svg b/workspaces/wi/wi-extension/assets/dark-plug.svg new file mode 100644 index 00000000000..79a529cdde7 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-plug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-post-api.svg b/workspaces/wi/wi-extension/assets/dark-post-api.svg new file mode 100644 index 00000000000..40e3cd17536 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-post-api.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-project.svg b/workspaces/wi/wi-extension/assets/dark-project.svg new file mode 100644 index 00000000000..cbcb68b1f69 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-project.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-put-api.svg b/workspaces/wi/wi-extension/assets/dark-put-api.svg new file mode 100644 index 00000000000..b0e77909548 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-put-api.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-rabbit-mq.svg b/workspaces/wi/wi-extension/assets/dark-rabbit-mq.svg new file mode 100644 index 00000000000..54cc8a0a2c6 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-rabbit-mq.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-rabbitmq-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-rabbitmq-endpoint.svg new file mode 100644 index 00000000000..54cc8a0a2c6 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-rabbitmq-endpoint.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-radio.svg b/workspaces/wi/wi-extension/assets/dark-radio.svg new file mode 100644 index 00000000000..2a67dadf799 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-radio.svg @@ -0,0 +1,25 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-recipient-list-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-recipient-list-endpoint.svg new file mode 100644 index 00000000000..7496952fd4e --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-recipient-list-endpoint.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-registry.svg b/workspaces/wi/wi-extension/assets/dark-registry.svg new file mode 100644 index 00000000000..96649b2fe4c --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-registry.svg @@ -0,0 +1,25 @@ + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-resequence-message-store.svg b/workspaces/wi/wi-extension/assets/dark-resequence-message-store.svg new file mode 100644 index 00000000000..2efda6f511c --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-resequence-message-store.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-scheduled-failover-message-forwarding-processor.svg b/workspaces/wi/wi-extension/assets/dark-scheduled-failover-message-forwarding-processor.svg new file mode 100644 index 00000000000..95733d9c909 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-scheduled-failover-message-forwarding-processor.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-scheduled-message-forwarding-processor.svg b/workspaces/wi/wi-extension/assets/dark-scheduled-message-forwarding-processor.svg new file mode 100644 index 00000000000..60e2087e1cb --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-scheduled-message-forwarding-processor.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-sequence-template.svg b/workspaces/wi/wi-extension/assets/dark-sequence-template.svg new file mode 100644 index 00000000000..becf9ddf4f6 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-sequence-template.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-settings.svg b/workspaces/wi/wi-extension/assets/dark-settings.svg new file mode 100644 index 00000000000..4b0b8768df3 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-start.svg b/workspaces/wi/wi-extension/assets/dark-start.svg new file mode 100644 index 00000000000..aec16394f90 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-start.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-task.svg b/workspaces/wi/wi-extension/assets/dark-task.svg new file mode 100644 index 00000000000..fd0b96d5eb0 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-task.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-tasklist.svg b/workspaces/wi/wi-extension/assets/dark-tasklist.svg new file mode 100644 index 00000000000..d793b7f4571 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-tasklist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-template-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-template-endpoint.svg new file mode 100644 index 00000000000..7aadbe99842 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-template-endpoint.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-template.svg b/workspaces/wi/wi-extension/assets/dark-template.svg new file mode 100644 index 00000000000..3ea7abcb0dd --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-template.svg @@ -0,0 +1,23 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-type-hierarchy.svg b/workspaces/wi/wi-extension/assets/dark-type-hierarchy.svg new file mode 100644 index 00000000000..5711a87dff7 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-type-hierarchy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-type.svg b/workspaces/wi/wi-extension/assets/dark-type.svg new file mode 100644 index 00000000000..b110b9af099 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-type.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-user-defined-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-user-defined-endpoint.svg new file mode 100644 index 00000000000..b1a1a0949db --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-user-defined-endpoint.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-ws-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-ws-endpoint.svg new file mode 100644 index 00000000000..26eb37f6ac4 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-ws-endpoint.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-wsdl-endpoint-template.svg b/workspaces/wi/wi-extension/assets/dark-wsdl-endpoint-template.svg new file mode 100644 index 00000000000..c160e484216 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-wsdl-endpoint-template.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-wsdl-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-wsdl-endpoint.svg new file mode 100644 index 00000000000..f258585765e --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-wsdl-endpoint.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-wso2-mb-message-store.svg b/workspaces/wi/wi-extension/assets/dark-wso2-mb-message-store.svg new file mode 100644 index 00000000000..50bd61a2491 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-wso2-mb-message-store.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/dark-wss-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-wss-endpoint.svg new file mode 100644 index 00000000000..81786610a04 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/dark-wss-endpoint.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/icon.svg b/workspaces/wi/wi-extension/assets/icon.svg new file mode 100644 index 00000000000..c4b720d5fca --- /dev/null +++ b/workspaces/wi/wi-extension/assets/icon.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-APIResource.svg b/workspaces/wi/wi-extension/assets/light-APIResource.svg new file mode 100644 index 00000000000..a863c8de693 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-APIResource.svg @@ -0,0 +1,21 @@ + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-Sequence.svg b/workspaces/wi/wi-extension/assets/light-Sequence.svg new file mode 100644 index 00000000000..ad516afa96d --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-Sequence.svg @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-address-endpoint-template.svg b/workspaces/wi/wi-extension/assets/light-address-endpoint-template.svg new file mode 100644 index 00000000000..192dea80780 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-address-endpoint-template.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-address-endpoint.svg b/workspaces/wi/wi-extension/assets/light-address-endpoint.svg new file mode 100644 index 00000000000..3b324e9a56a --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-address-endpoint.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-arrow-swap.svg b/workspaces/wi/wi-extension/assets/light-arrow-swap.svg new file mode 100644 index 00000000000..e8e8fd4c58e --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-arrow-swap.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-bi-ai-agent.svg b/workspaces/wi/wi-extension/assets/light-bi-ai-agent.svg new file mode 100644 index 00000000000..05eb6989f12 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-ai-agent.svg @@ -0,0 +1,22 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-bi-asb.svg b/workspaces/wi/wi-extension/assets/light-bi-asb.svg new file mode 100644 index 00000000000..d8b6cfe7d27 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-asb.svg @@ -0,0 +1,19 @@ + + + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-bi-config.svg b/workspaces/wi/wi-extension/assets/light-bi-config.svg new file mode 100644 index 00000000000..9c2f5bbca41 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-config.svg @@ -0,0 +1,23 @@ + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-bi-connection.svg b/workspaces/wi/wi-extension/assets/light-bi-connection.svg new file mode 100644 index 00000000000..276ed44a769 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-connection.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-bi-file.svg b/workspaces/wi/wi-extension/assets/light-bi-file.svg new file mode 100644 index 00000000000..46478766aca --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-file.svg @@ -0,0 +1,18 @@ + + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-bi-ftp.svg b/workspaces/wi/wi-extension/assets/light-bi-ftp.svg new file mode 100644 index 00000000000..2e46c58bfdd --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-ftp.svg @@ -0,0 +1,18 @@ + + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-bi-function.svg b/workspaces/wi/wi-extension/assets/light-bi-function.svg new file mode 100644 index 00000000000..db3105510df --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-function.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-bi-github.svg b/workspaces/wi/wi-extension/assets/light-bi-github.svg new file mode 100644 index 00000000000..0ba52caeb30 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-github.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-bi-globe.svg b/workspaces/wi/wi-extension/assets/light-bi-globe.svg new file mode 100644 index 00000000000..a01f6e44fc0 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-globe.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-bi-graphql.svg b/workspaces/wi/wi-extension/assets/light-bi-graphql.svg new file mode 100644 index 00000000000..3526cf2fa94 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-graphql.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-bi-grpc.svg b/workspaces/wi/wi-extension/assets/light-bi-grpc.svg new file mode 100644 index 00000000000..26599c1ab65 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-grpc.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-bi-http-service.svg b/workspaces/wi/wi-extension/assets/light-bi-http-service.svg new file mode 100644 index 00000000000..c39db2567c5 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-http-service.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-bi-java.svg b/workspaces/wi/wi-extension/assets/light-bi-java.svg new file mode 100644 index 00000000000..c2eab60f460 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-java.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-bi-kafka.svg b/workspaces/wi/wi-extension/assets/light-bi-kafka.svg new file mode 100644 index 00000000000..14caae46a03 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-kafka.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-bi-mqtt.svg b/workspaces/wi/wi-extension/assets/light-bi-mqtt.svg new file mode 100644 index 00000000000..8a204e7962b --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-mqtt.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-bi-nats.svg b/workspaces/wi/wi-extension/assets/light-bi-nats.svg new file mode 100644 index 00000000000..384a492f790 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-nats.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-bi-rabbitmq.svg b/workspaces/wi/wi-extension/assets/light-bi-rabbitmq.svg new file mode 100644 index 00000000000..351d0b5f8ff --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-rabbitmq.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-bi-salesforce.svg b/workspaces/wi/wi-extension/assets/light-bi-salesforce.svg new file mode 100644 index 00000000000..f6d846ee38f --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-salesforce.svg @@ -0,0 +1,18 @@ + + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-bi-task.svg b/workspaces/wi/wi-extension/assets/light-bi-task.svg new file mode 100644 index 00000000000..22390c2dc36 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-task.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-bi-tcp.svg b/workspaces/wi/wi-extension/assets/light-bi-tcp.svg new file mode 100644 index 00000000000..0f7ea674772 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-tcp.svg @@ -0,0 +1,19 @@ + + + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-bi-type.svg b/workspaces/wi/wi-extension/assets/light-bi-type.svg new file mode 100644 index 00000000000..4c5d1f61b2b --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-bi-type.svg @@ -0,0 +1,22 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-class-icon.svg b/workspaces/wi/wi-extension/assets/light-class-icon.svg new file mode 100644 index 00000000000..ba94d611aef --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-class-icon.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-config.svg b/workspaces/wi/wi-extension/assets/light-config.svg new file mode 100644 index 00000000000..9c2f5bbca41 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-config.svg @@ -0,0 +1,23 @@ + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-connection.svg b/workspaces/wi/wi-extension/assets/light-connection.svg new file mode 100644 index 00000000000..276ed44a769 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-connection.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-custom-message-processor.svg b/workspaces/wi/wi-extension/assets/light-custom-message-processor.svg new file mode 100644 index 00000000000..8fa0cb153a5 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-custom-message-processor.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-custom-message-store.svg b/workspaces/wi/wi-extension/assets/light-custom-message-store.svg new file mode 100644 index 00000000000..71b636bbdb0 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-custom-message-store.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-cxf-ws-rm-endpoint.svg b/workspaces/wi/wi-extension/assets/light-cxf-ws-rm-endpoint.svg new file mode 100644 index 00000000000..22dd4479403 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-cxf-ws-rm-endpoint.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-data-service.svg b/workspaces/wi/wi-extension/assets/light-data-service.svg new file mode 100644 index 00000000000..b3b64fe627b --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-data-service.svg @@ -0,0 +1,4 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-data-source.svg b/workspaces/wi/wi-extension/assets/light-data-source.svg new file mode 100644 index 00000000000..06bcc15e4af --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-data-source.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-dataMapper.svg b/workspaces/wi/wi-extension/assets/light-dataMapper.svg new file mode 100644 index 00000000000..09ed86b5a24 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-dataMapper.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-database.svg b/workspaces/wi/wi-extension/assets/light-database.svg new file mode 100644 index 00000000000..9279174fcf8 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-database.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-default-endpoint-template.svg b/workspaces/wi/wi-extension/assets/light-default-endpoint-template.svg new file mode 100644 index 00000000000..90514a7388c --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-default-endpoint-template.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-default-endpoint.svg b/workspaces/wi/wi-extension/assets/light-default-endpoint.svg new file mode 100644 index 00000000000..e5ff8f645f4 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-default-endpoint.svg @@ -0,0 +1,4 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-delete-api.svg b/workspaces/wi/wi-extension/assets/light-delete-api.svg new file mode 100644 index 00000000000..3a5bde808ab --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-delete-api.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-endpoint.svg b/workspaces/wi/wi-extension/assets/light-endpoint.svg new file mode 100644 index 00000000000..503cb4e90f8 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-endpoint.svg @@ -0,0 +1,23 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-failover-endpoint.svg b/workspaces/wi/wi-extension/assets/light-failover-endpoint.svg new file mode 100644 index 00000000000..3ecfd61be0f --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-failover-endpoint.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-feed-endpoint.svg b/workspaces/wi/wi-extension/assets/light-feed-endpoint.svg new file mode 100644 index 00000000000..b8b3df99349 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-feed-endpoint.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-file-endpoint.svg b/workspaces/wi/wi-extension/assets/light-file-endpoint.svg new file mode 100644 index 00000000000..e17e064e21e --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-file-endpoint.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-file.svg b/workspaces/wi/wi-extension/assets/light-file.svg new file mode 100644 index 00000000000..34d7df6cb04 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-fold-down.svg b/workspaces/wi/wi-extension/assets/light-fold-down.svg new file mode 100644 index 00000000000..0f4395702dc --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-fold-down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-function.svg b/workspaces/wi/wi-extension/assets/light-function.svg new file mode 100644 index 00000000000..db3105510df --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-function.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-gear.svg b/workspaces/wi/wi-extension/assets/light-gear.svg new file mode 100644 index 00000000000..6ebe8311d7d --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-gear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-get-api.svg b/workspaces/wi/wi-extension/assets/light-get-api.svg new file mode 100644 index 00000000000..d2b111b7fbf --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-get-api.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-globe.svg b/workspaces/wi/wi-extension/assets/light-globe.svg new file mode 100644 index 00000000000..31b5e39e19f --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-head-api.svg b/workspaces/wi/wi-extension/assets/light-head-api.svg new file mode 100644 index 00000000000..73327c9395d --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-head-api.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-hl7-endpoint.svg b/workspaces/wi/wi-extension/assets/light-hl7-endpoint.svg new file mode 100644 index 00000000000..6a9be6b52e2 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-hl7-endpoint.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-http-endpoint-template.svg b/workspaces/wi/wi-extension/assets/light-http-endpoint-template.svg new file mode 100644 index 00000000000..70b4bc07961 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-http-endpoint-template.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-http-endpoint.svg b/workspaces/wi/wi-extension/assets/light-http-endpoint.svg new file mode 100644 index 00000000000..e1c78516b60 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-http-endpoint.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-http-inbound-endpoint.svg b/workspaces/wi/wi-extension/assets/light-http-inbound-endpoint.svg new file mode 100644 index 00000000000..6a824a9213b --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-http-inbound-endpoint.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-http-service.svg b/workspaces/wi/wi-extension/assets/light-http-service.svg new file mode 100644 index 00000000000..c39db2567c5 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-http-service.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-https-endpoint.svg b/workspaces/wi/wi-extension/assets/light-https-endpoint.svg new file mode 100644 index 00000000000..1f7eefb919d --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-https-endpoint.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-icon.svg b/workspaces/wi/wi-extension/assets/light-icon.svg new file mode 100644 index 00000000000..c4b720d5fca --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-icon.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-in-memory-message-store.svg b/workspaces/wi/wi-extension/assets/light-in-memory-message-store.svg new file mode 100644 index 00000000000..6018b0413cc --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-in-memory-message-store.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-inbound-endpoint.svg b/workspaces/wi/wi-extension/assets/light-inbound-endpoint.svg new file mode 100644 index 00000000000..08372c2764e --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-inbound-endpoint.svg @@ -0,0 +1,22 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-jdbc-message-store.svg b/workspaces/wi/wi-extension/assets/light-jdbc-message-store.svg new file mode 100644 index 00000000000..29887ddff4f --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-jdbc-message-store.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-jms-endpoint.svg b/workspaces/wi/wi-extension/assets/light-jms-endpoint.svg new file mode 100644 index 00000000000..cce222b2135 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-jms-endpoint.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-jms-message-store.svg b/workspaces/wi/wi-extension/assets/light-jms-message-store.svg new file mode 100644 index 00000000000..209d1820cf7 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-jms-message-store.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-kafka-endpoint.svg b/workspaces/wi/wi-extension/assets/light-kafka-endpoint.svg new file mode 100644 index 00000000000..9f49c1ac39f --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-kafka-endpoint.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-list-ordered.svg b/workspaces/wi/wi-extension/assets/light-list-ordered.svg new file mode 100644 index 00000000000..625bb418df3 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-list-ordered.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-load-balance-endpoint.svg b/workspaces/wi/wi-extension/assets/light-load-balance-endpoint.svg new file mode 100644 index 00000000000..704c3da1941 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-load-balance-endpoint.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-local-entry.svg b/workspaces/wi/wi-extension/assets/light-local-entry.svg new file mode 100644 index 00000000000..b4d25504516 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-local-entry.svg @@ -0,0 +1,21 @@ + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-message-processor.svg b/workspaces/wi/wi-extension/assets/light-message-processor.svg new file mode 100644 index 00000000000..b4245701e60 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-message-processor.svg @@ -0,0 +1,22 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-message-sampling-processor.svg b/workspaces/wi/wi-extension/assets/light-message-sampling-processor.svg new file mode 100644 index 00000000000..1b4947ef30a --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-message-sampling-processor.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-message-store.svg b/workspaces/wi/wi-extension/assets/light-message-store.svg new file mode 100644 index 00000000000..00dfb7914b3 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-message-store.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-mqtt-endpoint.svg b/workspaces/wi/wi-extension/assets/light-mqtt-endpoint.svg new file mode 100644 index 00000000000..3dedfffc941 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-mqtt-endpoint.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-options-api.svg b/workspaces/wi/wi-extension/assets/light-options-api.svg new file mode 100644 index 00000000000..9d000f3353c --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-options-api.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-patch-api.svg b/workspaces/wi/wi-extension/assets/light-patch-api.svg new file mode 100644 index 00000000000..8cf8fcdc14b --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-patch-api.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-plug.svg b/workspaces/wi/wi-extension/assets/light-plug.svg new file mode 100644 index 00000000000..965d1bd21f0 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-plug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-post-api.svg b/workspaces/wi/wi-extension/assets/light-post-api.svg new file mode 100644 index 00000000000..40e3cd17536 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-post-api.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-project.svg b/workspaces/wi/wi-extension/assets/light-project.svg new file mode 100644 index 00000000000..f679f31f39c --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-project.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-put-api.svg b/workspaces/wi/wi-extension/assets/light-put-api.svg new file mode 100644 index 00000000000..b0e77909548 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-put-api.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-rabbit-mq.svg b/workspaces/wi/wi-extension/assets/light-rabbit-mq.svg new file mode 100644 index 00000000000..8e12e947233 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-rabbit-mq.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-rabbitmq-endpoint.svg b/workspaces/wi/wi-extension/assets/light-rabbitmq-endpoint.svg new file mode 100644 index 00000000000..8e12e947233 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-rabbitmq-endpoint.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-radio.svg b/workspaces/wi/wi-extension/assets/light-radio.svg new file mode 100644 index 00000000000..ca911870186 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-radio.svg @@ -0,0 +1,25 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-recipient-list-endpoint.svg b/workspaces/wi/wi-extension/assets/light-recipient-list-endpoint.svg new file mode 100644 index 00000000000..169b8911eb0 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-recipient-list-endpoint.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-registry.svg b/workspaces/wi/wi-extension/assets/light-registry.svg new file mode 100644 index 00000000000..28a225fa0e0 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-registry.svg @@ -0,0 +1,42 @@ + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-resequence-message-store.svg b/workspaces/wi/wi-extension/assets/light-resequence-message-store.svg new file mode 100644 index 00000000000..4752d9da266 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-resequence-message-store.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-scheduled-failover-message-forwarding-processor.svg b/workspaces/wi/wi-extension/assets/light-scheduled-failover-message-forwarding-processor.svg new file mode 100644 index 00000000000..da1cb984923 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-scheduled-failover-message-forwarding-processor.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-scheduled-message-forwarding-processor.svg b/workspaces/wi/wi-extension/assets/light-scheduled-message-forwarding-processor.svg new file mode 100644 index 00000000000..945212ceb28 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-scheduled-message-forwarding-processor.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-sequence-template.svg b/workspaces/wi/wi-extension/assets/light-sequence-template.svg new file mode 100644 index 00000000000..04664ac093c --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-sequence-template.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-settings.svg b/workspaces/wi/wi-extension/assets/light-settings.svg new file mode 100644 index 00000000000..43c88712079 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-start.svg b/workspaces/wi/wi-extension/assets/light-start.svg new file mode 100644 index 00000000000..0df9c2f1c0e --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-start.svg @@ -0,0 +1,20 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-task.svg b/workspaces/wi/wi-extension/assets/light-task.svg new file mode 100644 index 00000000000..22390c2dc36 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-task.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-tasklist.svg b/workspaces/wi/wi-extension/assets/light-tasklist.svg new file mode 100644 index 00000000000..640f0a5baf5 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-tasklist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-template-endpoint.svg b/workspaces/wi/wi-extension/assets/light-template-endpoint.svg new file mode 100644 index 00000000000..2387e859e2c --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-template-endpoint.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-template.svg b/workspaces/wi/wi-extension/assets/light-template.svg new file mode 100644 index 00000000000..edc703d2c8e --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-template.svg @@ -0,0 +1,23 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-type-hierarchy.svg b/workspaces/wi/wi-extension/assets/light-type-hierarchy.svg new file mode 100644 index 00000000000..937e1724c15 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-type-hierarchy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-type.svg b/workspaces/wi/wi-extension/assets/light-type.svg new file mode 100644 index 00000000000..66d8088015d --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-type.svg @@ -0,0 +1,21 @@ + + + + diff --git a/workspaces/wi/wi-extension/assets/light-user-defined-endpoint.svg b/workspaces/wi/wi-extension/assets/light-user-defined-endpoint.svg new file mode 100644 index 00000000000..e18996d9d43 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-user-defined-endpoint.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-ws-endpoint.svg b/workspaces/wi/wi-extension/assets/light-ws-endpoint.svg new file mode 100644 index 00000000000..5e074d2ce96 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-ws-endpoint.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-wsdl-endpoint-template.svg b/workspaces/wi/wi-extension/assets/light-wsdl-endpoint-template.svg new file mode 100644 index 00000000000..d77a30f3125 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-wsdl-endpoint-template.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-wsdl-endpoint.svg b/workspaces/wi/wi-extension/assets/light-wsdl-endpoint.svg new file mode 100644 index 00000000000..8fb271bf273 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-wsdl-endpoint.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-wso2-mb-message-store.svg b/workspaces/wi/wi-extension/assets/light-wso2-mb-message-store.svg new file mode 100644 index 00000000000..d9aec3059df --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-wso2-mb-message-store.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/workspaces/wi/wi-extension/assets/light-wss-endpoint.svg b/workspaces/wi/wi-extension/assets/light-wss-endpoint.svg new file mode 100644 index 00000000000..52b3b630854 --- /dev/null +++ b/workspaces/wi/wi-extension/assets/light-wss-endpoint.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/workspaces/wi/wi-extension/resources/codicons/codicon.css b/workspaces/wi/wi-extension/resources/codicons/codicon.css new file mode 100644 index 00000000000..404f5e10316 --- /dev/null +++ b/workspaces/wi/wi-extension/resources/codicons/codicon.css @@ -0,0 +1,571 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +@font-face { + font-family: "codicon"; + font-display: block; + src: url("./codicon.ttf?0e5b0adf625a37fbcd638d31f0fe72aa") format("truetype"); +} + +.codicon[class*='codicon-'] { + font: normal normal normal 16px/1 codicon; + display: inline-block; + text-decoration: none; + text-rendering: auto; + text-align: center; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + user-select: none; + -webkit-user-select: none; + -ms-user-select: none; +} + +/*--------------------- + * Modifiers + *-------------------*/ + +@keyframes codicon-spin { + 100% { + transform:rotate(360deg); + } +} + +.codicon-sync.codicon-modifier-spin, +.codicon-loading.codicon-modifier-spin, +.codicon-gear.codicon-modifier-spin { + /* Use steps to throttle FPS to reduce CPU usage */ + animation: codicon-spin 1.5s steps(30) infinite; +} + +.codicon-modifier-disabled { + opacity: 0.5; +} + +.codicon-modifier-hidden { + opacity: 0; +} + +/* custom speed & easing for loading icon */ +.codicon-loading { + animation-duration: 1s !important; + animation-timing-function: cubic-bezier(0.53, 0.21, 0.29, 0.67) !important; +} + +/*--------------------- + * Icons + *-------------------*/ + +.codicon-add:before { content: "\ea60" } +.codicon-plus:before { content: "\ea60" } +.codicon-gist-new:before { content: "\ea60" } +.codicon-repo-create:before { content: "\ea60" } +.codicon-lightbulb:before { content: "\ea61" } +.codicon-light-bulb:before { content: "\ea61" } +.codicon-repo:before { content: "\ea62" } +.codicon-repo-delete:before { content: "\ea62" } +.codicon-gist-fork:before { content: "\ea63" } +.codicon-repo-forked:before { content: "\ea63" } +.codicon-git-pull-request:before { content: "\ea64" } +.codicon-git-pull-request-abandoned:before { content: "\ea64" } +.codicon-record-keys:before { content: "\ea65" } +.codicon-keyboard:before { content: "\ea65" } +.codicon-tag:before { content: "\ea66" } +.codicon-tag-add:before { content: "\ea66" } +.codicon-tag-remove:before { content: "\ea66" } +.codicon-person:before { content: "\ea67" } +.codicon-person-follow:before { content: "\ea67" } +.codicon-person-outline:before { content: "\ea67" } +.codicon-person-filled:before { content: "\ea67" } +.codicon-git-branch:before { content: "\ea68" } +.codicon-git-branch-create:before { content: "\ea68" } +.codicon-git-branch-delete:before { content: "\ea68" } +.codicon-source-control:before { content: "\ea68" } +.codicon-mirror:before { content: "\ea69" } +.codicon-mirror-public:before { content: "\ea69" } +.codicon-star:before { content: "\ea6a" } +.codicon-star-add:before { content: "\ea6a" } +.codicon-star-delete:before { content: "\ea6a" } +.codicon-star-empty:before { content: "\ea6a" } +.codicon-comment:before { content: "\ea6b" } +.codicon-comment-add:before { content: "\ea6b" } +.codicon-alert:before { content: "\ea6c" } +.codicon-warning:before { content: "\ea6c" } +.codicon-search:before { content: "\ea6d" } +.codicon-search-save:before { content: "\ea6d" } +.codicon-log-out:before { content: "\ea6e" } +.codicon-sign-out:before { content: "\ea6e" } +.codicon-log-in:before { content: "\ea6f" } +.codicon-sign-in:before { content: "\ea6f" } +.codicon-eye:before { content: "\ea70" } +.codicon-eye-unwatch:before { content: "\ea70" } +.codicon-eye-watch:before { content: "\ea70" } +.codicon-circle-filled:before { content: "\ea71" } +.codicon-primitive-dot:before { content: "\ea71" } +.codicon-close-dirty:before { content: "\ea71" } +.codicon-debug-breakpoint:before { content: "\ea71" } +.codicon-debug-breakpoint-disabled:before { content: "\ea71" } +.codicon-debug-hint:before { content: "\ea71" } +.codicon-primitive-square:before { content: "\ea72" } +.codicon-edit:before { content: "\ea73" } +.codicon-pencil:before { content: "\ea73" } +.codicon-info:before { content: "\ea74" } +.codicon-issue-opened:before { content: "\ea74" } +.codicon-gist-private:before { content: "\ea75" } +.codicon-git-fork-private:before { content: "\ea75" } +.codicon-lock:before { content: "\ea75" } +.codicon-mirror-private:before { content: "\ea75" } +.codicon-close:before { content: "\ea76" } +.codicon-remove-close:before { content: "\ea76" } +.codicon-x:before { content: "\ea76" } +.codicon-repo-sync:before { content: "\ea77" } +.codicon-sync:before { content: "\ea77" } +.codicon-clone:before { content: "\ea78" } +.codicon-desktop-download:before { content: "\ea78" } +.codicon-beaker:before { content: "\ea79" } +.codicon-microscope:before { content: "\ea79" } +.codicon-vm:before { content: "\ea7a" } +.codicon-device-desktop:before { content: "\ea7a" } +.codicon-file:before { content: "\ea7b" } +.codicon-file-text:before { content: "\ea7b" } +.codicon-more:before { content: "\ea7c" } +.codicon-ellipsis:before { content: "\ea7c" } +.codicon-kebab-horizontal:before { content: "\ea7c" } +.codicon-mail-reply:before { content: "\ea7d" } +.codicon-reply:before { content: "\ea7d" } +.codicon-organization:before { content: "\ea7e" } +.codicon-organization-filled:before { content: "\ea7e" } +.codicon-organization-outline:before { content: "\ea7e" } +.codicon-new-file:before { content: "\ea7f" } +.codicon-file-add:before { content: "\ea7f" } +.codicon-new-folder:before { content: "\ea80" } +.codicon-file-directory-create:before { content: "\ea80" } +.codicon-trash:before { content: "\ea81" } +.codicon-trashcan:before { content: "\ea81" } +.codicon-history:before { content: "\ea82" } +.codicon-clock:before { content: "\ea82" } +.codicon-folder:before { content: "\ea83" } +.codicon-file-directory:before { content: "\ea83" } +.codicon-symbol-folder:before { content: "\ea83" } +.codicon-logo-github:before { content: "\ea84" } +.codicon-mark-github:before { content: "\ea84" } +.codicon-github:before { content: "\ea84" } +.codicon-terminal:before { content: "\ea85" } +.codicon-console:before { content: "\ea85" } +.codicon-repl:before { content: "\ea85" } +.codicon-zap:before { content: "\ea86" } +.codicon-symbol-event:before { content: "\ea86" } +.codicon-error:before { content: "\ea87" } +.codicon-stop:before { content: "\ea87" } +.codicon-variable:before { content: "\ea88" } +.codicon-symbol-variable:before { content: "\ea88" } +.codicon-array:before { content: "\ea8a" } +.codicon-symbol-array:before { content: "\ea8a" } +.codicon-symbol-module:before { content: "\ea8b" } +.codicon-symbol-package:before { content: "\ea8b" } +.codicon-symbol-namespace:before { content: "\ea8b" } +.codicon-symbol-object:before { content: "\ea8b" } +.codicon-symbol-method:before { content: "\ea8c" } +.codicon-symbol-function:before { content: "\ea8c" } +.codicon-symbol-constructor:before { content: "\ea8c" } +.codicon-symbol-boolean:before { content: "\ea8f" } +.codicon-symbol-null:before { content: "\ea8f" } +.codicon-symbol-numeric:before { content: "\ea90" } +.codicon-symbol-number:before { content: "\ea90" } +.codicon-symbol-structure:before { content: "\ea91" } +.codicon-symbol-struct:before { content: "\ea91" } +.codicon-symbol-parameter:before { content: "\ea92" } +.codicon-symbol-type-parameter:before { content: "\ea92" } +.codicon-symbol-key:before { content: "\ea93" } +.codicon-symbol-text:before { content: "\ea93" } +.codicon-symbol-reference:before { content: "\ea94" } +.codicon-go-to-file:before { content: "\ea94" } +.codicon-symbol-enum:before { content: "\ea95" } +.codicon-symbol-value:before { content: "\ea95" } +.codicon-symbol-ruler:before { content: "\ea96" } +.codicon-symbol-unit:before { content: "\ea96" } +.codicon-activate-breakpoints:before { content: "\ea97" } +.codicon-archive:before { content: "\ea98" } +.codicon-arrow-both:before { content: "\ea99" } +.codicon-arrow-down:before { content: "\ea9a" } +.codicon-arrow-left:before { content: "\ea9b" } +.codicon-arrow-right:before { content: "\ea9c" } +.codicon-arrow-small-down:before { content: "\ea9d" } +.codicon-arrow-small-left:before { content: "\ea9e" } +.codicon-arrow-small-right:before { content: "\ea9f" } +.codicon-arrow-small-up:before { content: "\eaa0" } +.codicon-arrow-up:before { content: "\eaa1" } +.codicon-bell:before { content: "\eaa2" } +.codicon-bold:before { content: "\eaa3" } +.codicon-book:before { content: "\eaa4" } +.codicon-bookmark:before { content: "\eaa5" } +.codicon-debug-breakpoint-conditional-unverified:before { content: "\eaa6" } +.codicon-debug-breakpoint-conditional:before { content: "\eaa7" } +.codicon-debug-breakpoint-conditional-disabled:before { content: "\eaa7" } +.codicon-debug-breakpoint-data-unverified:before { content: "\eaa8" } +.codicon-debug-breakpoint-data:before { content: "\eaa9" } +.codicon-debug-breakpoint-data-disabled:before { content: "\eaa9" } +.codicon-debug-breakpoint-log-unverified:before { content: "\eaaa" } +.codicon-debug-breakpoint-log:before { content: "\eaab" } +.codicon-debug-breakpoint-log-disabled:before { content: "\eaab" } +.codicon-briefcase:before { content: "\eaac" } +.codicon-broadcast:before { content: "\eaad" } +.codicon-browser:before { content: "\eaae" } +.codicon-bug:before { content: "\eaaf" } +.codicon-calendar:before { content: "\eab0" } +.codicon-case-sensitive:before { content: "\eab1" } +.codicon-check:before { content: "\eab2" } +.codicon-checklist:before { content: "\eab3" } +.codicon-chevron-down:before { content: "\eab4" } +.codicon-chevron-left:before { content: "\eab5" } +.codicon-chevron-right:before { content: "\eab6" } +.codicon-chevron-up:before { content: "\eab7" } +.codicon-chrome-close:before { content: "\eab8" } +.codicon-chrome-maximize:before { content: "\eab9" } +.codicon-chrome-minimize:before { content: "\eaba" } +.codicon-chrome-restore:before { content: "\eabb" } +.codicon-circle-outline:before { content: "\eabc" } +.codicon-debug-breakpoint-unverified:before { content: "\eabc" } +.codicon-circle-slash:before { content: "\eabd" } +.codicon-circuit-board:before { content: "\eabe" } +.codicon-clear-all:before { content: "\eabf" } +.codicon-clippy:before { content: "\eac0" } +.codicon-close-all:before { content: "\eac1" } +.codicon-cloud-download:before { content: "\eac2" } +.codicon-cloud-upload:before { content: "\eac3" } +.codicon-code:before { content: "\eac4" } +.codicon-collapse-all:before { content: "\eac5" } +.codicon-color-mode:before { content: "\eac6" } +.codicon-comment-discussion:before { content: "\eac7" } +.codicon-credit-card:before { content: "\eac9" } +.codicon-dash:before { content: "\eacc" } +.codicon-dashboard:before { content: "\eacd" } +.codicon-database:before { content: "\eace" } +.codicon-debug-continue:before { content: "\eacf" } +.codicon-debug-disconnect:before { content: "\ead0" } +.codicon-debug-pause:before { content: "\ead1" } +.codicon-debug-restart:before { content: "\ead2" } +.codicon-debug-start:before { content: "\ead3" } +.codicon-debug-step-into:before { content: "\ead4" } +.codicon-debug-step-out:before { content: "\ead5" } +.codicon-debug-step-over:before { content: "\ead6" } +.codicon-debug-stop:before { content: "\ead7" } +.codicon-debug:before { content: "\ead8" } +.codicon-device-camera-video:before { content: "\ead9" } +.codicon-device-camera:before { content: "\eada" } +.codicon-device-mobile:before { content: "\eadb" } +.codicon-diff-added:before { content: "\eadc" } +.codicon-diff-ignored:before { content: "\eadd" } +.codicon-diff-modified:before { content: "\eade" } +.codicon-diff-removed:before { content: "\eadf" } +.codicon-diff-renamed:before { content: "\eae0" } +.codicon-diff:before { content: "\eae1" } +.codicon-discard:before { content: "\eae2" } +.codicon-editor-layout:before { content: "\eae3" } +.codicon-empty-window:before { content: "\eae4" } +.codicon-exclude:before { content: "\eae5" } +.codicon-extensions:before { content: "\eae6" } +.codicon-eye-closed:before { content: "\eae7" } +.codicon-file-binary:before { content: "\eae8" } +.codicon-file-code:before { content: "\eae9" } +.codicon-file-media:before { content: "\eaea" } +.codicon-file-pdf:before { content: "\eaeb" } +.codicon-file-submodule:before { content: "\eaec" } +.codicon-file-symlink-directory:before { content: "\eaed" } +.codicon-file-symlink-file:before { content: "\eaee" } +.codicon-file-zip:before { content: "\eaef" } +.codicon-files:before { content: "\eaf0" } +.codicon-filter:before { content: "\eaf1" } +.codicon-flame:before { content: "\eaf2" } +.codicon-fold-down:before { content: "\eaf3" } +.codicon-fold-up:before { content: "\eaf4" } +.codicon-fold:before { content: "\eaf5" } +.codicon-folder-active:before { content: "\eaf6" } +.codicon-folder-opened:before { content: "\eaf7" } +.codicon-gear:before { content: "\eaf8" } +.codicon-gift:before { content: "\eaf9" } +.codicon-gist-secret:before { content: "\eafa" } +.codicon-gist:before { content: "\eafb" } +.codicon-git-commit:before { content: "\eafc" } +.codicon-git-compare:before { content: "\eafd" } +.codicon-compare-changes:before { content: "\eafd" } +.codicon-git-merge:before { content: "\eafe" } +.codicon-github-action:before { content: "\eaff" } +.codicon-github-alt:before { content: "\eb00" } +.codicon-globe:before { content: "\eb01" } +.codicon-grabber:before { content: "\eb02" } +.codicon-graph:before { content: "\eb03" } +.codicon-gripper:before { content: "\eb04" } +.codicon-heart:before { content: "\eb05" } +.codicon-home:before { content: "\eb06" } +.codicon-horizontal-rule:before { content: "\eb07" } +.codicon-hubot:before { content: "\eb08" } +.codicon-inbox:before { content: "\eb09" } +.codicon-issue-reopened:before { content: "\eb0b" } +.codicon-issues:before { content: "\eb0c" } +.codicon-italic:before { content: "\eb0d" } +.codicon-jersey:before { content: "\eb0e" } +.codicon-json:before { content: "\eb0f" } +.codicon-kebab-vertical:before { content: "\eb10" } +.codicon-key:before { content: "\eb11" } +.codicon-law:before { content: "\eb12" } +.codicon-lightbulb-autofix:before { content: "\eb13" } +.codicon-link-external:before { content: "\eb14" } +.codicon-link:before { content: "\eb15" } +.codicon-list-ordered:before { content: "\eb16" } +.codicon-list-unordered:before { content: "\eb17" } +.codicon-live-share:before { content: "\eb18" } +.codicon-loading:before { content: "\eb19" } +.codicon-location:before { content: "\eb1a" } +.codicon-mail-read:before { content: "\eb1b" } +.codicon-mail:before { content: "\eb1c" } +.codicon-markdown:before { content: "\eb1d" } +.codicon-megaphone:before { content: "\eb1e" } +.codicon-mention:before { content: "\eb1f" } +.codicon-milestone:before { content: "\eb20" } +.codicon-mortar-board:before { content: "\eb21" } +.codicon-move:before { content: "\eb22" } +.codicon-multiple-windows:before { content: "\eb23" } +.codicon-mute:before { content: "\eb24" } +.codicon-no-newline:before { content: "\eb25" } +.codicon-note:before { content: "\eb26" } +.codicon-octoface:before { content: "\eb27" } +.codicon-open-preview:before { content: "\eb28" } +.codicon-package:before { content: "\eb29" } +.codicon-paintcan:before { content: "\eb2a" } +.codicon-pin:before { content: "\eb2b" } +.codicon-play:before { content: "\eb2c" } +.codicon-run:before { content: "\eb2c" } +.codicon-plug:before { content: "\eb2d" } +.codicon-preserve-case:before { content: "\eb2e" } +.codicon-preview:before { content: "\eb2f" } +.codicon-project:before { content: "\eb30" } +.codicon-pulse:before { content: "\eb31" } +.codicon-question:before { content: "\eb32" } +.codicon-quote:before { content: "\eb33" } +.codicon-radio-tower:before { content: "\eb34" } +.codicon-reactions:before { content: "\eb35" } +.codicon-references:before { content: "\eb36" } +.codicon-refresh:before { content: "\eb37" } +.codicon-regex:before { content: "\eb38" } +.codicon-remote-explorer:before { content: "\eb39" } +.codicon-remote:before { content: "\eb3a" } +.codicon-remove:before { content: "\eb3b" } +.codicon-replace-all:before { content: "\eb3c" } +.codicon-replace:before { content: "\eb3d" } +.codicon-repo-clone:before { content: "\eb3e" } +.codicon-repo-force-push:before { content: "\eb3f" } +.codicon-repo-pull:before { content: "\eb40" } +.codicon-repo-push:before { content: "\eb41" } +.codicon-report:before { content: "\eb42" } +.codicon-request-changes:before { content: "\eb43" } +.codicon-rocket:before { content: "\eb44" } +.codicon-root-folder-opened:before { content: "\eb45" } +.codicon-root-folder:before { content: "\eb46" } +.codicon-rss:before { content: "\eb47" } +.codicon-ruby:before { content: "\eb48" } +.codicon-save-all:before { content: "\eb49" } +.codicon-save-as:before { content: "\eb4a" } +.codicon-save:before { content: "\eb4b" } +.codicon-screen-full:before { content: "\eb4c" } +.codicon-screen-normal:before { content: "\eb4d" } +.codicon-search-stop:before { content: "\eb4e" } +.codicon-server:before { content: "\eb50" } +.codicon-settings-gear:before { content: "\eb51" } +.codicon-settings:before { content: "\eb52" } +.codicon-shield:before { content: "\eb53" } +.codicon-smiley:before { content: "\eb54" } +.codicon-sort-precedence:before { content: "\eb55" } +.codicon-split-horizontal:before { content: "\eb56" } +.codicon-split-vertical:before { content: "\eb57" } +.codicon-squirrel:before { content: "\eb58" } +.codicon-star-full:before { content: "\eb59" } +.codicon-star-half:before { content: "\eb5a" } +.codicon-symbol-class:before { content: "\eb5b" } +.codicon-symbol-color:before { content: "\eb5c" } +.codicon-symbol-constant:before { content: "\eb5d" } +.codicon-symbol-enum-member:before { content: "\eb5e" } +.codicon-symbol-field:before { content: "\eb5f" } +.codicon-symbol-file:before { content: "\eb60" } +.codicon-symbol-interface:before { content: "\eb61" } +.codicon-symbol-keyword:before { content: "\eb62" } +.codicon-symbol-misc:before { content: "\eb63" } +.codicon-symbol-operator:before { content: "\eb64" } +.codicon-symbol-property:before { content: "\eb65" } +.codicon-wrench:before { content: "\eb65" } +.codicon-wrench-subaction:before { content: "\eb65" } +.codicon-symbol-snippet:before { content: "\eb66" } +.codicon-tasklist:before { content: "\eb67" } +.codicon-telescope:before { content: "\eb68" } +.codicon-text-size:before { content: "\eb69" } +.codicon-three-bars:before { content: "\eb6a" } +.codicon-thumbsdown:before { content: "\eb6b" } +.codicon-thumbsup:before { content: "\eb6c" } +.codicon-tools:before { content: "\eb6d" } +.codicon-triangle-down:before { content: "\eb6e" } +.codicon-triangle-left:before { content: "\eb6f" } +.codicon-triangle-right:before { content: "\eb70" } +.codicon-triangle-up:before { content: "\eb71" } +.codicon-twitter:before { content: "\eb72" } +.codicon-unfold:before { content: "\eb73" } +.codicon-unlock:before { content: "\eb74" } +.codicon-unmute:before { content: "\eb75" } +.codicon-unverified:before { content: "\eb76" } +.codicon-verified:before { content: "\eb77" } +.codicon-versions:before { content: "\eb78" } +.codicon-vm-active:before { content: "\eb79" } +.codicon-vm-outline:before { content: "\eb7a" } +.codicon-vm-running:before { content: "\eb7b" } +.codicon-watch:before { content: "\eb7c" } +.codicon-whitespace:before { content: "\eb7d" } +.codicon-whole-word:before { content: "\eb7e" } +.codicon-window:before { content: "\eb7f" } +.codicon-word-wrap:before { content: "\eb80" } +.codicon-zoom-in:before { content: "\eb81" } +.codicon-zoom-out:before { content: "\eb82" } +.codicon-list-filter:before { content: "\eb83" } +.codicon-list-flat:before { content: "\eb84" } +.codicon-list-selection:before { content: "\eb85" } +.codicon-selection:before { content: "\eb85" } +.codicon-list-tree:before { content: "\eb86" } +.codicon-debug-breakpoint-function-unverified:before { content: "\eb87" } +.codicon-debug-breakpoint-function:before { content: "\eb88" } +.codicon-debug-breakpoint-function-disabled:before { content: "\eb88" } +.codicon-debug-stackframe-active:before { content: "\eb89" } +.codicon-circle-small-filled:before { content: "\eb8a" } +.codicon-debug-stackframe-dot:before { content: "\eb8a" } +.codicon-debug-stackframe:before { content: "\eb8b" } +.codicon-debug-stackframe-focused:before { content: "\eb8b" } +.codicon-debug-breakpoint-unsupported:before { content: "\eb8c" } +.codicon-symbol-string:before { content: "\eb8d" } +.codicon-debug-reverse-continue:before { content: "\eb8e" } +.codicon-debug-step-back:before { content: "\eb8f" } +.codicon-debug-restart-frame:before { content: "\eb90" } +.codicon-debug-alt:before { content: "\eb91" } +.codicon-call-incoming:before { content: "\eb92" } +.codicon-call-outgoing:before { content: "\eb93" } +.codicon-menu:before { content: "\eb94" } +.codicon-expand-all:before { content: "\eb95" } +.codicon-feedback:before { content: "\eb96" } +.codicon-group-by-ref-type:before { content: "\eb97" } +.codicon-ungroup-by-ref-type:before { content: "\eb98" } +.codicon-account:before { content: "\eb99" } +.codicon-bell-dot:before { content: "\eb9a" } +.codicon-debug-console:before { content: "\eb9b" } +.codicon-library:before { content: "\eb9c" } +.codicon-output:before { content: "\eb9d" } +.codicon-run-all:before { content: "\eb9e" } +.codicon-sync-ignored:before { content: "\eb9f" } +.codicon-pinned:before { content: "\eba0" } +.codicon-github-inverted:before { content: "\eba1" } +.codicon-server-process:before { content: "\eba2" } +.codicon-server-environment:before { content: "\eba3" } +.codicon-pass:before { content: "\eba4" } +.codicon-issue-closed:before { content: "\eba4" } +.codicon-stop-circle:before { content: "\eba5" } +.codicon-play-circle:before { content: "\eba6" } +.codicon-record:before { content: "\eba7" } +.codicon-debug-alt-small:before { content: "\eba8" } +.codicon-vm-connect:before { content: "\eba9" } +.codicon-cloud:before { content: "\ebaa" } +.codicon-merge:before { content: "\ebab" } +.codicon-export:before { content: "\ebac" } +.codicon-graph-left:before { content: "\ebad" } +.codicon-magnet:before { content: "\ebae" } +.codicon-notebook:before { content: "\ebaf" } +.codicon-redo:before { content: "\ebb0" } +.codicon-check-all:before { content: "\ebb1" } +.codicon-pinned-dirty:before { content: "\ebb2" } +.codicon-pass-filled:before { content: "\ebb3" } +.codicon-circle-large-filled:before { content: "\ebb4" } +.codicon-circle-large-outline:before { content: "\ebb5" } +.codicon-combine:before { content: "\ebb6" } +.codicon-gather:before { content: "\ebb6" } +.codicon-table:before { content: "\ebb7" } +.codicon-variable-group:before { content: "\ebb8" } +.codicon-type-hierarchy:before { content: "\ebb9" } +.codicon-type-hierarchy-sub:before { content: "\ebba" } +.codicon-type-hierarchy-super:before { content: "\ebbb" } +.codicon-git-pull-request-create:before { content: "\ebbc" } +.codicon-run-above:before { content: "\ebbd" } +.codicon-run-below:before { content: "\ebbe" } +.codicon-notebook-template:before { content: "\ebbf" } +.codicon-debug-rerun:before { content: "\ebc0" } +.codicon-workspace-trusted:before { content: "\ebc1" } +.codicon-workspace-untrusted:before { content: "\ebc2" } +.codicon-workspace-unknown:before { content: "\ebc3" } +.codicon-terminal-cmd:before { content: "\ebc4" } +.codicon-terminal-debian:before { content: "\ebc5" } +.codicon-terminal-linux:before { content: "\ebc6" } +.codicon-terminal-powershell:before { content: "\ebc7" } +.codicon-terminal-tmux:before { content: "\ebc8" } +.codicon-terminal-ubuntu:before { content: "\ebc9" } +.codicon-terminal-bash:before { content: "\ebca" } +.codicon-arrow-swap:before { content: "\ebcb" } +.codicon-copy:before { content: "\ebcc" } +.codicon-person-add:before { content: "\ebcd" } +.codicon-filter-filled:before { content: "\ebce" } +.codicon-wand:before { content: "\ebcf" } +.codicon-debug-line-by-line:before { content: "\ebd0" } +.codicon-inspect:before { content: "\ebd1" } +.codicon-layers:before { content: "\ebd2" } +.codicon-layers-dot:before { content: "\ebd3" } +.codicon-layers-active:before { content: "\ebd4" } +.codicon-compass:before { content: "\ebd5" } +.codicon-compass-dot:before { content: "\ebd6" } +.codicon-compass-active:before { content: "\ebd7" } +.codicon-azure:before { content: "\ebd8" } +.codicon-issue-draft:before { content: "\ebd9" } +.codicon-git-pull-request-closed:before { content: "\ebda" } +.codicon-git-pull-request-draft:before { content: "\ebdb" } +.codicon-debug-all:before { content: "\ebdc" } +.codicon-debug-coverage:before { content: "\ebdd" } +.codicon-run-errors:before { content: "\ebde" } +.codicon-folder-library:before { content: "\ebdf" } +.codicon-debug-continue-small:before { content: "\ebe0" } +.codicon-beaker-stop:before { content: "\ebe1" } +.codicon-graph-line:before { content: "\ebe2" } +.codicon-graph-scatter:before { content: "\ebe3" } +.codicon-pie-chart:before { content: "\ebe4" } +.codicon-bracket:before { content: "\eb0f" } +.codicon-bracket-dot:before { content: "\ebe5" } +.codicon-bracket-error:before { content: "\ebe6" } +.codicon-lock-small:before { content: "\ebe7" } +.codicon-azure-devops:before { content: "\ebe8" } +.codicon-verified-filled:before { content: "\ebe9" } +.codicon-newline:before { content: "\ebea" } +.codicon-layout:before { content: "\ebeb" } +.codicon-layout-activitybar-left:before { content: "\ebec" } +.codicon-layout-activitybar-right:before { content: "\ebed" } +.codicon-layout-panel-left:before { content: "\ebee" } +.codicon-layout-panel-center:before { content: "\ebef" } +.codicon-layout-panel-justify:before { content: "\ebf0" } +.codicon-layout-panel-right:before { content: "\ebf1" } +.codicon-layout-panel:before { content: "\ebf2" } +.codicon-layout-sidebar-left:before { content: "\ebf3" } +.codicon-layout-sidebar-right:before { content: "\ebf4" } +.codicon-layout-statusbar:before { content: "\ebf5" } +.codicon-layout-menubar:before { content: "\ebf6" } +.codicon-layout-centered:before { content: "\ebf7" } +.codicon-target:before { content: "\ebf8" } +.codicon-indent:before { content: "\ebf9" } +.codicon-record-small:before { content: "\ebfa" } +.codicon-error-small:before { content: "\ebfb" } +.codicon-arrow-circle-down:before { content: "\ebfc" } +.codicon-arrow-circle-left:before { content: "\ebfd" } +.codicon-arrow-circle-right:before { content: "\ebfe" } +.codicon-arrow-circle-up:before { content: "\ebff" } +.codicon-layout-sidebar-right-off:before { content: "\ec00" } +.codicon-layout-panel-off:before { content: "\ec01" } +.codicon-layout-sidebar-left-off:before { content: "\ec02" } +.codicon-blank:before { content: "\ec03" } +.codicon-heart-filled:before { content: "\ec04" } +.codicon-map:before { content: "\ec05" } +.codicon-map-filled:before { content: "\ec06" } +.codicon-circle-small:before { content: "\ec07" } +.codicon-bell-slash:before { content: "\ec08" } +.codicon-bell-slash-dot:before { content: "\ec09" } +.codicon-comment-unresolved:before { content: "\ec0a" } +.codicon-git-pull-request-go-to-changes:before { content: "\ec0b" } +.codicon-git-pull-request-new-changes:before { content: "\ec0c" } diff --git a/workspaces/wi/wi-extension/resources/codicons/codicon.csv b/workspaces/wi/wi-extension/resources/codicons/codicon.csv new file mode 100644 index 00000000000..0fd7d656add --- /dev/null +++ b/workspaces/wi/wi-extension/resources/codicons/codicon.csv @@ -0,0 +1,421 @@ +short_name,character,unicode +account,,EB99 +activate-breakpoints,,EA97 +add,,EA60 +archive,,EA98 +arrow-both,,EA99 +arrow-circle-down,,EBFC +arrow-circle-left,,EBFD +arrow-circle-right,,EBFE +arrow-circle-up,,EBFF +arrow-down,,EA9A +arrow-left,,EA9B +arrow-right,,EA9C +arrow-small-down,,EA9D +arrow-small-left,,EA9E +arrow-small-right,,EA9F +arrow-small-up,,EAA0 +arrow-swap,,EBCB +arrow-up,,EAA1 +azure-devops,,EBE8 +azure,,EBD8 +beaker-stop,,EBE1 +beaker,,EA79 +bell-dot,,EB9A +bell-slash-dot,,EC09 +bell-slash,,EC08 +bell,,EAA2 +blank,,EC03 +bold,,EAA3 +book,,EAA4 +bookmark,,EAA5 +bracket-dot,,EBE5 +bracket-error,,EBE6 +briefcase,,EAAC +broadcast,,EAAD +browser,,EAAE +bug,,EAAF +calendar,,EAB0 +call-incoming,,EB92 +call-outgoing,,EB93 +case-sensitive,,EAB1 +check-all,,EBB1 +check,,EAB2 +checklist,,EAB3 +chevron-down,,EAB4 +chevron-left,,EAB5 +chevron-right,,EAB6 +chevron-up,,EAB7 +chrome-close,,EAB8 +chrome-maximize,,EAB9 +chrome-minimize,,EABA +chrome-restore,,EABB +circle-filled,,EA71 +circle-large-filled,,EBB4 +circle-large-outline,,EBB5 +circle-outline,,EABC +circle-slash,,EABD +circle-small-filled,,EB8A +circle-small,,EC07 +circuit-board,,EABE +clear-all,,EABF +clippy,,EAC0 +close-all,,EAC1 +close,,EA76 +cloud-download,,EAC2 +cloud-upload,,EAC3 +cloud,,EBAA +code,,EAC4 +collapse-all,,EAC5 +color-mode,,EAC6 +combine,,EBB6 +comment-discussion,,EAC7 +comment-unresolved,,EC0A +comment,,EA6B +compass-active,,EBD7 +compass-dot,,EBD6 +compass,,EBD5 +copy,,EBCC +credit-card,,EAC9 +dash,,EACC +dashboard,,EACD +database,,EACE +debug-all,,EBDC +debug-alt-small,,EBA8 +debug-alt,,EB91 +debug-breakpoint-conditional-unverified,,EAA6 +debug-breakpoint-conditional,,EAA7 +debug-breakpoint-data-unverified,,EAA8 +debug-breakpoint-data,,EAA9 +debug-breakpoint-function-unverified,,EB87 +debug-breakpoint-function,,EB88 +debug-breakpoint-log-unverified,,EAAA +debug-breakpoint-log,,EAAB +debug-breakpoint-unsupported,,EB8C +debug-console,,EB9B +debug-continue-small,,EBE0 +debug-continue,,EACF +debug-coverage,,EBDD +debug-disconnect,,EAD0 +debug-line-by-line,,EBD0 +debug-pause,,EAD1 +debug-rerun,,EBC0 +debug-restart-frame,,EB90 +debug-restart,,EAD2 +debug-reverse-continue,,EB8E +debug-stackframe-active,,EB89 +debug-stackframe,,EB8B +debug-start,,EAD3 +debug-step-back,,EB8F +debug-step-into,,EAD4 +debug-step-out,,EAD5 +debug-step-over,,EAD6 +debug-stop,,EAD7 +debug,,EAD8 +desktop-download,,EA78 +device-camera-video,,EAD9 +device-camera,,EADA +device-mobile,,EADB +diff-added,,EADC +diff-ignored,,EADD +diff-modified,,EADE +diff-removed,,EADF +diff-renamed,,EAE0 +diff,,EAE1 +discard,,EAE2 +edit,,EA73 +editor-layout,,EAE3 +ellipsis,,EA7C +empty-window,,EAE4 +error-small,,EBFB +error,,EA87 +exclude,,EAE5 +expand-all,,EB95 +export,,EBAC +extensions,,EAE6 +eye-closed,,EAE7 +eye,,EA70 +feedback,,EB96 +file-binary,,EAE8 +file-code,,EAE9 +file-media,,EAEA +file-pdf,,EAEB +file-submodule,,EAEC +file-symlink-directory,,EAED +file-symlink-file,,EAEE +file-zip,,EAEF +file,,EA7B +files,,EAF0 +filter-filled,,EBCE +filter,,EAF1 +flame,,EAF2 +fold-down,,EAF3 +fold-up,,EAF4 +fold,,EAF5 +folder-active,,EAF6 +folder-library,,EBDF +folder-opened,,EAF7 +folder,,EA83 +gear,,EAF8 +gift,,EAF9 +gist-secret,,EAFA +git-commit,,EAFC +git-compare,,EAFD +git-merge,,EAFE +git-pull-request-closed,,EBDA +git-pull-request-create,,EBBC +git-pull-request-draft,,EBDB +git-pull-request-go-to-changes,,EC0B +git-pull-request-new-changes,,EC0C +git-pull-request,,EA64 +github-action,,EAFF +github-alt,,EB00 +github-inverted,,EBA1 +github,,EA84 +globe,,EB01 +go-to-file,,EA94 +grabber,,EB02 +graph-left,,EBAD +graph-line,,EBE2 +graph-scatter,,EBE3 +graph,,EB03 +gripper,,EB04 +group-by-ref-type,,EB97 +heart-filled,,EC04 +heart,,EB05 +history,,EA82 +home,,EB06 +horizontal-rule,,EB07 +hubot,,EB08 +inbox,,EB09 +indent,,EBF9 +info,,EA74 +inspect,,EBD1 +issue-draft,,EBD9 +issue-reopened,,EB0B +issues,,EB0C +italic,,EB0D +jersey,,EB0E +json,,EB0F +kebab-vertical,,EB10 +key,,EB11 +law,,EB12 +layers-active,,EBD4 +layers-dot,,EBD3 +layers,,EBD2 +layout-activitybar-left,,EBEC +layout-activitybar-right,,EBED +layout-centered,,EBF7 +layout-menubar,,EBF6 +layout-panel-center,,EBEF +layout-panel-justify,,EBF0 +layout-panel-left,,EBEE +layout-panel-off,,EC01 +layout-panel-right,,EBF1 +layout-panel,,EBF2 +layout-sidebar-left-off,,EC02 +layout-sidebar-left,,EBF3 +layout-sidebar-right-off,,EC00 +layout-sidebar-right,,EBF4 +layout-statusbar,,EBF5 +layout,,EBEB +library,,EB9C +lightbulb-autofix,,EB13 +lightbulb,,EA61 +link-external,,EB14 +link,,EB15 +list-filter,,EB83 +list-flat,,EB84 +list-ordered,,EB16 +list-selection,,EB85 +list-tree,,EB86 +list-unordered,,EB17 +live-share,,EB18 +loading,,EB19 +location,,EB1A +lock-small,,EBE7 +lock,,EA75 +magnet,,EBAE +mail-read,,EB1B +mail,,EB1C +map-filled,,EC06 +map,,EC05 +markdown,,EB1D +megaphone,,EB1E +mention,,EB1F +menu,,EB94 +merge,,EBAB +milestone,,EB20 +mirror,,EA69 +mortar-board,,EB21 +move,,EB22 +multiple-windows,,EB23 +mute,,EB24 +new-file,,EA7F +new-folder,,EA80 +newline,,EBEA +no-newline,,EB25 +note,,EB26 +notebook-template,,EBBF +notebook,,EBAF +octoface,,EB27 +open-preview,,EB28 +organization,,EA7E +output,,EB9D +package,,EB29 +paintcan,,EB2A +pass-filled,,EBB3 +pass,,EBA4 +person-add,,EBCD +person,,EA67 +pie-chart,,EBE4 +pin,,EB2B +pinned-dirty,,EBB2 +pinned,,EBA0 +play-circle,,EBA6 +play,,EB2C +plug,,EB2D +preserve-case,,EB2E +preview,,EB2F +primitive-square,,EA72 +project,,EB30 +pulse,,EB31 +question,,EB32 +quote,,EB33 +radio-tower,,EB34 +reactions,,EB35 +record-keys,,EA65 +record-small,,EBFA +record,,EBA7 +redo,,EBB0 +references,,EB36 +refresh,,EB37 +regex,,EB38 +remote-explorer,,EB39 +remote,,EB3A +remove,,EB3B +replace-all,,EB3C +replace,,EB3D +reply,,EA7D +repo-clone,,EB3E +repo-force-push,,EB3F +repo-forked,,EA63 +repo-pull,,EB40 +repo-push,,EB41 +repo,,EA62 +report,,EB42 +request-changes,,EB43 +rocket,,EB44 +root-folder-opened,,EB45 +root-folder,,EB46 +rss,,EB47 +ruby,,EB48 +run-above,,EBBD +run-all,,EB9E +run-below,,EBBE +run-errors,,EBDE +save-all,,EB49 +save-as,,EB4A +save,,EB4B +screen-full,,EB4C +screen-normal,,EB4D +search-stop,,EB4E +search,,EA6D +server-environment,,EBA3 +server-process,,EBA2 +server,,EB50 +settings-gear,,EB51 +settings,,EB52 +shield,,EB53 +sign-in,,EA6F +sign-out,,EA6E +smiley,,EB54 +sort-precedence,,EB55 +source-control,,EA68 +split-horizontal,,EB56 +split-vertical,,EB57 +squirrel,,EB58 +star-empty,,EA6A +star-full,,EB59 +star-half,,EB5A +stop-circle,,EBA5 +symbol-array,,EA8A +symbol-boolean,,EA8F +symbol-class,,EB5B +symbol-color,,EB5C +symbol-constant,,EB5D +symbol-enum-member,,EB5E +symbol-enum,,EA95 +symbol-event,,EA86 +symbol-field,,EB5F +symbol-file,,EB60 +symbol-interface,,EB61 +symbol-key,,EA93 +symbol-keyword,,EB62 +symbol-method,,EA8C +symbol-misc,,EB63 +symbol-namespace,,EA8B +symbol-numeric,,EA90 +symbol-operator,,EB64 +symbol-parameter,,EA92 +symbol-property,,EB65 +symbol-ruler,,EA96 +symbol-snippet,,EB66 +symbol-string,,EB8D +symbol-structure,,EA91 +symbol-variable,,EA88 +sync-ignored,,EB9F +sync,,EA77 +table,,EBB7 +tag,,EA66 +target,,EBF8 +tasklist,,EB67 +telescope,,EB68 +terminal-bash,,EBCA +terminal-cmd,,EBC4 +terminal-debian,,EBC5 +terminal-linux,,EBC6 +terminal-powershell,,EBC7 +terminal-tmux,,EBC8 +terminal-ubuntu,,EBC9 +terminal,,EA85 +text-size,,EB69 +three-bars,,EB6A +thumbsdown,,EB6B +thumbsup,,EB6C +tools,,EB6D +trash,,EA81 +triangle-down,,EB6E +triangle-left,,EB6F +triangle-right,,EB70 +triangle-up,,EB71 +twitter,,EB72 +type-hierarchy-sub,,EBBA +type-hierarchy-super,,EBBB +type-hierarchy,,EBB9 +unfold,,EB73 +ungroup-by-ref-type,,EB98 +unlock,,EB74 +unmute,,EB75 +unverified,,EB76 +variable-group,,EBB8 +verified-filled,,EBE9 +verified,,EB77 +versions,,EB78 +vm-active,,EB79 +vm-connect,,EBA9 +vm-outline,,EB7A +vm-running,,EB7B +vm,,EA7A +wand,,EBCF +warning,,EA6C +watch,,EB7C +whitespace,,EB7D +whole-word,,EB7E +window,,EB7F +word-wrap,,EB80 +workspace-trusted,,EBC1 +workspace-unknown,,EBC3 +workspace-untrusted,,EBC2 +zoom-in,,EB81 +zoom-out,,EB82 diff --git a/workspaces/wi/wi-extension/resources/codicons/codicon.html b/workspaces/wi/wi-extension/resources/codicons/codicon.html new file mode 100644 index 00000000000..ec8a3224959 --- /dev/null +++ b/workspaces/wi/wi-extension/resources/codicons/codicon.html @@ -0,0 +1,3871 @@ + + + + + codicon | The icon font for Visual Studio Code + + + + + + + +

codicon

+ + + +
+
+ + + +
+ account + +
+
+ + + +
+ activate-breakpoints + +
+
+ + + +
+ add + +
+
+ + + +
+ archive + +
+
+ + + +
+ arrow-both + +
+
+ + + +
+ arrow-circle-down + +
+
+ + + +
+ arrow-circle-left + +
+
+ + + +
+ arrow-circle-right + +
+
+ + + +
+ arrow-circle-up + +
+
+ + + +
+ arrow-down + +
+
+ + + +
+ arrow-left + +
+
+ + + +
+ arrow-right + +
+
+ + + +
+ arrow-small-down + +
+
+ + + +
+ arrow-small-left + +
+
+ + + +
+ arrow-small-right + +
+
+ + + +
+ arrow-small-up + +
+
+ + + +
+ arrow-swap + +
+
+ + + +
+ arrow-up + +
+
+ + + +
+ azure-devops + +
+
+ + + +
+ azure + +
+
+ + + +
+ beaker-stop + +
+
+ + + +
+ beaker + +
+
+ + + +
+ bell-dot + +
+
+ + + +
+ bell-slash-dot + +
+
+ + + +
+ bell-slash + +
+
+ + + +
+ bell + +
+
+ + + +
+ blank + +
+
+ + + +
+ bold + +
+
+ + + +
+ book + +
+
+ + + +
+ bookmark + +
+
+ + + +
+ bracket-dot + +
+
+ + + +
+ bracket-error + +
+
+ + + +
+ briefcase + +
+
+ + + +
+ broadcast + +
+
+ + + +
+ browser + +
+
+ + + +
+ bug + +
+
+ + + +
+ calendar + +
+
+ + + +
+ call-incoming + +
+
+ + + +
+ call-outgoing + +
+
+ + + +
+ case-sensitive + +
+
+ + + +
+ check-all + +
+
+ + + +
+ check + +
+
+ + + +
+ checklist + +
+
+ + + +
+ chevron-down + +
+
+ + + +
+ chevron-left + +
+
+ + + +
+ chevron-right + +
+
+ + + +
+ chevron-up + +
+
+ + + +
+ chrome-close + +
+
+ + + +
+ chrome-maximize + +
+
+ + + +
+ chrome-minimize + +
+
+ + + +
+ chrome-restore + +
+
+ + + +
+ circle-filled + +
+
+ + + +
+ circle-large-filled + +
+
+ + + +
+ circle-large-outline + +
+
+ + + +
+ circle-outline + +
+
+ + + +
+ circle-slash + +
+
+ + + +
+ circle-small-filled + +
+
+ + + +
+ circle-small + +
+
+ + + +
+ circuit-board + +
+
+ + + +
+ clear-all + +
+
+ + + +
+ clippy + +
+
+ + + +
+ close-all + +
+
+ + + +
+ close + +
+
+ + + +
+ cloud-download + +
+
+ + + +
+ cloud-upload + +
+
+ + + +
+ cloud + +
+
+ + + +
+ code + +
+
+ + + +
+ collapse-all + +
+
+ + + +
+ color-mode + +
+
+ + + +
+ combine + +
+
+ + + +
+ comment-discussion + +
+
+ + + +
+ comment-unresolved + +
+
+ + + +
+ comment + +
+
+ + + +
+ compass-active + +
+
+ + + +
+ compass-dot + +
+
+ + + +
+ compass + +
+
+ + + +
+ copy + +
+
+ + + +
+ credit-card + +
+
+ + + +
+ dash + +
+
+ + + +
+ dashboard + +
+
+ + + +
+ database + +
+
+ + + +
+ debug-all + +
+
+ + + +
+ debug-alt-small + +
+
+ + + +
+ debug-alt + +
+
+ + + +
+ debug-breakpoint-conditional-unverified + +
+
+ + + +
+ debug-breakpoint-conditional + +
+
+ + + +
+ debug-breakpoint-data-unverified + +
+
+ + + +
+ debug-breakpoint-data + +
+
+ + + +
+ debug-breakpoint-function-unverified + +
+
+ + + +
+ debug-breakpoint-function + +
+
+ + + +
+ debug-breakpoint-log-unverified + +
+
+ + + +
+ debug-breakpoint-log + +
+
+ + + +
+ debug-breakpoint-unsupported + +
+
+ + + +
+ debug-console + +
+
+ + + +
+ debug-continue-small + +
+
+ + + +
+ debug-continue + +
+
+ + + +
+ debug-coverage + +
+
+ + + +
+ debug-disconnect + +
+
+ + + +
+ debug-line-by-line + +
+
+ + + +
+ debug-pause + +
+
+ + + +
+ debug-rerun + +
+
+ + + +
+ debug-restart-frame + +
+
+ + + +
+ debug-restart + +
+
+ + + +
+ debug-reverse-continue + +
+
+ + + +
+ debug-stackframe-active + +
+
+ + + +
+ debug-stackframe + +
+
+ + + +
+ debug-start + +
+
+ + + +
+ debug-step-back + +
+
+ + + +
+ debug-step-into + +
+
+ + + +
+ debug-step-out + +
+
+ + + +
+ debug-step-over + +
+
+ + + +
+ debug-stop + +
+
+ + + +
+ debug + +
+
+ + + +
+ desktop-download + +
+
+ + + +
+ device-camera-video + +
+
+ + + +
+ device-camera + +
+
+ + + +
+ device-mobile + +
+
+ + + +
+ diff-added + +
+
+ + + +
+ diff-ignored + +
+
+ + + +
+ diff-modified + +
+
+ + + +
+ diff-removed + +
+
+ + + +
+ diff-renamed + +
+
+ + + +
+ diff + +
+
+ + + +
+ discard + +
+
+ + + +
+ edit + +
+
+ + + +
+ editor-layout + +
+
+ + + +
+ ellipsis + +
+
+ + + +
+ empty-window + +
+
+ + + +
+ error-small + +
+
+ + + +
+ error + +
+
+ + + +
+ exclude + +
+
+ + + +
+ expand-all + +
+
+ + + +
+ export + +
+
+ + + +
+ extensions + +
+
+ + + +
+ eye-closed + +
+
+ + + +
+ eye + +
+
+ + + +
+ feedback + +
+
+ + + +
+ file-binary + +
+
+ + + +
+ file-code + +
+
+ + + +
+ file-media + +
+
+ + + +
+ file-pdf + +
+
+ + + +
+ file-submodule + +
+
+ + + +
+ file-symlink-directory + +
+
+ + + +
+ file-symlink-file + +
+
+ + + +
+ file-zip + +
+
+ + + +
+ file + +
+
+ + + +
+ files + +
+
+ + + +
+ filter-filled + +
+
+ + + +
+ filter + +
+
+ + + +
+ flame + +
+
+ + + +
+ fold-down + +
+
+ + + +
+ fold-up + +
+
+ + + +
+ fold + +
+
+ + + +
+ folder-active + +
+
+ + + +
+ folder-library + +
+
+ + + +
+ folder-opened + +
+
+ + + +
+ folder + +
+
+ + + +
+ gear + +
+
+ + + +
+ gift + +
+
+ + + +
+ gist-secret + +
+
+ + + +
+ gist + +
+
+ + + +
+ git-commit + +
+
+ + + +
+ git-compare + +
+
+ + + +
+ git-merge + +
+
+ + + +
+ git-pull-request-closed + +
+
+ + + +
+ git-pull-request-create + +
+
+ + + +
+ git-pull-request-draft + +
+
+ + + +
+ git-pull-request-go-to-changes + +
+
+ + + +
+ git-pull-request-new-changes + +
+
+ + + +
+ git-pull-request + +
+
+ + + +
+ github-action + +
+
+ + + +
+ github-alt + +
+
+ + + +
+ github-inverted + +
+
+ + + +
+ github + +
+
+ + + +
+ globe + +
+
+ + + +
+ go-to-file + +
+
+ + + +
+ grabber + +
+
+ + + +
+ graph-left + +
+
+ + + +
+ graph-line + +
+
+ + + +
+ graph-scatter + +
+
+ + + +
+ graph + +
+
+ + + +
+ gripper + +
+
+ + + +
+ group-by-ref-type + +
+
+ + + +
+ heart-filled + +
+
+ + + +
+ heart + +
+
+ + + +
+ history + +
+
+ + + +
+ home + +
+
+ + + +
+ horizontal-rule + +
+
+ + + +
+ hubot + +
+
+ + + +
+ inbox + +
+
+ + + +
+ indent + +
+
+ + + +
+ info + +
+
+ + + +
+ inspect + +
+
+ + + +
+ issue-draft + +
+
+ + + +
+ issue-reopened + +
+
+ + + +
+ issues + +
+
+ + + +
+ italic + +
+
+ + + +
+ jersey + +
+
+ + + +
+ json + +
+
+ + + +
+ kebab-vertical + +
+
+ + + +
+ key + +
+
+ + + +
+ law + +
+
+ + + +
+ layers-active + +
+
+ + + +
+ layers-dot + +
+
+ + + +
+ layers + +
+
+ + + +
+ layout-activitybar-left + +
+
+ + + +
+ layout-activitybar-right + +
+
+ + + +
+ layout-centered + +
+
+ + + +
+ layout-menubar + +
+
+ + + +
+ layout-panel-center + +
+
+ + + +
+ layout-panel-justify + +
+
+ + + +
+ layout-panel-left + +
+
+ + + +
+ layout-panel-off + +
+
+ + + +
+ layout-panel-right + +
+
+ + + +
+ layout-panel + +
+
+ + + +
+ layout-sidebar-left-off + +
+
+ + + +
+ layout-sidebar-left + +
+
+ + + +
+ layout-sidebar-right-off + +
+
+ + + +
+ layout-sidebar-right + +
+
+ + + +
+ layout-statusbar + +
+
+ + + +
+ layout + +
+
+ + + +
+ library + +
+
+ + + +
+ lightbulb-autofix + +
+
+ + + +
+ lightbulb + +
+
+ + + +
+ link-external + +
+
+ + + +
+ link + +
+
+ + + +
+ list-filter + +
+
+ + + +
+ list-flat + +
+
+ + + +
+ list-ordered + +
+
+ + + +
+ list-selection + +
+
+ + + +
+ list-tree + +
+
+ + + +
+ list-unordered + +
+
+ + + +
+ live-share + +
+
+ + + +
+ loading + +
+
+ + + +
+ location + +
+
+ + + +
+ lock-small + +
+
+ + + +
+ lock + +
+
+ + + +
+ magnet + +
+
+ + + +
+ mail-read + +
+
+ + + +
+ mail + +
+
+ + + +
+ map-filled + +
+
+ + + +
+ map + +
+
+ + + +
+ markdown + +
+
+ + + +
+ megaphone + +
+
+ + + +
+ mention + +
+
+ + + +
+ menu + +
+
+ + + +
+ merge + +
+
+ + + +
+ milestone + +
+
+ + + +
+ mirror + +
+
+ + + +
+ mortar-board + +
+
+ + + +
+ move + +
+
+ + + +
+ multiple-windows + +
+
+ + + +
+ mute + +
+
+ + + +
+ new-file + +
+
+ + + +
+ new-folder + +
+
+ + + +
+ newline + +
+
+ + + +
+ no-newline + +
+
+ + + +
+ note + +
+
+ + + +
+ notebook-template + +
+
+ + + +
+ notebook + +
+
+ + + +
+ octoface + +
+
+ + + +
+ open-preview + +
+
+ + + +
+ organization + +
+
+ + + +
+ output + +
+
+ + + +
+ package + +
+
+ + + +
+ paintcan + +
+
+ + + +
+ pass-filled + +
+
+ + + +
+ pass + +
+
+ + + +
+ person-add + +
+
+ + + +
+ person + +
+
+ + + +
+ pie-chart + +
+
+ + + +
+ pin + +
+
+ + + +
+ pinned-dirty + +
+
+ + + +
+ pinned + +
+
+ + + +
+ play-circle + +
+
+ + + +
+ play + +
+
+ + + +
+ plug + +
+
+ + + +
+ preserve-case + +
+
+ + + +
+ preview + +
+
+ + + +
+ primitive-square + +
+
+ + + +
+ project + +
+
+ + + +
+ pulse + +
+
+ + + +
+ question + +
+
+ + + +
+ quote + +
+
+ + + +
+ radio-tower + +
+
+ + + +
+ reactions + +
+
+ + + +
+ record-keys + +
+
+ + + +
+ record-small + +
+
+ + + +
+ record + +
+
+ + + +
+ redo + +
+
+ + + +
+ references + +
+
+ + + +
+ refresh + +
+
+ + + +
+ regex + +
+
+ + + +
+ remote-explorer + +
+
+ + + +
+ remote + +
+
+ + + +
+ remove + +
+
+ + + +
+ replace-all + +
+
+ + + +
+ replace + +
+
+ + + +
+ reply + +
+
+ + + +
+ repo-clone + +
+
+ + + +
+ repo-force-push + +
+
+ + + +
+ repo-forked + +
+
+ + + +
+ repo-pull + +
+
+ + + +
+ repo-push + +
+
+ + + +
+ repo + +
+
+ + + +
+ report + +
+
+ + + +
+ request-changes + +
+
+ + + +
+ rocket + +
+
+ + + +
+ root-folder-opened + +
+
+ + + +
+ root-folder + +
+
+ + + +
+ rss + +
+
+ + + +
+ ruby + +
+
+ + + +
+ run-above + +
+
+ + + +
+ run-all + +
+
+ + + +
+ run-below + +
+
+ + + +
+ run-errors + +
+
+ + + +
+ save-all + +
+
+ + + +
+ save-as + +
+
+ + + +
+ save + +
+
+ + + +
+ screen-full + +
+
+ + + +
+ screen-normal + +
+
+ + + +
+ search-stop + +
+
+ + + +
+ search + +
+
+ + + +
+ server-environment + +
+
+ + + +
+ server-process + +
+
+ + + +
+ server + +
+
+ + + +
+ settings-gear + +
+
+ + + +
+ settings + +
+
+ + + +
+ shield + +
+
+ + + +
+ sign-in + +
+
+ + + +
+ sign-out + +
+
+ + + +
+ smiley + +
+
+ + + +
+ sort-precedence + +
+
+ + + +
+ source-control + +
+
+ + + +
+ split-horizontal + +
+
+ + + +
+ split-vertical + +
+
+ + + +
+ squirrel + +
+
+ + + +
+ star-empty + +
+
+ + + +
+ star-full + +
+
+ + + +
+ star-half + +
+
+ + + +
+ stop-circle + +
+
+ + + +
+ symbol-array + +
+
+ + + +
+ symbol-boolean + +
+
+ + + +
+ symbol-class + +
+
+ + + +
+ symbol-color + +
+
+ + + +
+ symbol-constant + +
+
+ + + +
+ symbol-enum-member + +
+
+ + + +
+ symbol-enum + +
+
+ + + +
+ symbol-event + +
+
+ + + +
+ symbol-field + +
+
+ + + +
+ symbol-file + +
+
+ + + +
+ symbol-interface + +
+
+ + + +
+ symbol-key + +
+
+ + + +
+ symbol-keyword + +
+
+ + + +
+ symbol-method + +
+
+ + + +
+ symbol-misc + +
+
+ + + +
+ symbol-namespace + +
+
+ + + +
+ symbol-numeric + +
+
+ + + +
+ symbol-operator + +
+
+ + + +
+ symbol-parameter + +
+
+ + + +
+ symbol-property + +
+
+ + + +
+ symbol-ruler + +
+
+ + + +
+ symbol-snippet + +
+
+ + + +
+ symbol-string + +
+
+ + + +
+ symbol-structure + +
+
+ + + +
+ symbol-variable + +
+
+ + + +
+ sync-ignored + +
+
+ + + +
+ sync + +
+
+ + + +
+ table + +
+
+ + + +
+ tag + +
+
+ + + +
+ target + +
+
+ + + +
+ tasklist + +
+
+ + + +
+ telescope + +
+
+ + + +
+ terminal-bash + +
+
+ + + +
+ terminal-cmd + +
+
+ + + +
+ terminal-debian + +
+
+ + + +
+ terminal-linux + +
+
+ + + +
+ terminal-powershell + +
+
+ + + +
+ terminal-tmux + +
+
+ + + +
+ terminal-ubuntu + +
+
+ + + +
+ terminal + +
+
+ + + +
+ text-size + +
+
+ + + +
+ three-bars + +
+
+ + + +
+ thumbsdown + +
+
+ + + +
+ thumbsup + +
+
+ + + +
+ tools + +
+
+ + + +
+ trash + +
+
+ + + +
+ triangle-down + +
+
+ + + +
+ triangle-left + +
+
+ + + +
+ triangle-right + +
+
+ + + +
+ triangle-up + +
+
+ + + +
+ twitter + +
+
+ + + +
+ type-hierarchy-sub + +
+
+ + + +
+ type-hierarchy-super + +
+
+ + + +
+ type-hierarchy + +
+
+ + + +
+ unfold + +
+
+ + + +
+ ungroup-by-ref-type + +
+
+ + + +
+ unlock + +
+
+ + + +
+ unmute + +
+
+ + + +
+ unverified + +
+
+ + + +
+ variable-group + +
+
+ + + +
+ verified-filled + +
+
+ + + +
+ verified + +
+
+ + + +
+ versions + +
+
+ + + +
+ vm-active + +
+
+ + + +
+ vm-connect + +
+
+ + + +
+ vm-outline + +
+
+ + + +
+ vm-running + +
+
+ + + +
+ vm + +
+
+ + + +
+ wand + +
+
+ + + +
+ warning + +
+
+ + + +
+ watch + +
+
+ + + +
+ whitespace + +
+
+ + + +
+ whole-word + +
+
+ + + +
+ window + +
+
+ + + +
+ word-wrap + +
+
+ + + +
+ workspace-trusted + +
+
+ + + +
+ workspace-unknown + +
+
+ + + +
+ workspace-untrusted + +
+
+ + + +
+ zoom-in + +
+
+ + + +
+ zoom-out + +
+
+ +
📋 Copied:
+ + + + + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/resources/codicons/codicon.svg b/workspaces/wi/wi-extension/resources/codicons/codicon.svg new file mode 100644 index 00000000000..7689b4d9f5f --- /dev/null +++ b/workspaces/wi/wi-extension/resources/codicons/codicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/workspaces/wi/wi-extension/resources/codicons/codicon.ttf b/workspaces/wi/wi-extension/resources/codicons/codicon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5abfa748fb56c712c19d127f550727acc3fabe59 GIT binary patch literal 72504 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 aw7tK54Sg0|WnEidz9 Date: Mon, 10 Nov 2025 02:27:12 +0530 Subject: [PATCH 07/55] Support MI project open --- workspaces/mi/mi-extension/package.json | 40 +-------- .../src/project-explorer/activate.ts | 2 +- .../mi/mi-extension/src/stateMachine.ts | 67 +++++++++++++-- .../mi-extension/src/visualizer/activate.ts | 86 ++++++++++--------- workspaces/wi/wi-extension/package.json | 4 +- workspaces/wi/wi-extension/src/extension.ts | 7 +- .../wi/wi-extension/src/mi-treeview/utils.ts | 44 ++++++++++ 7 files changed, 162 insertions(+), 88 deletions(-) create mode 100644 workspaces/wi/wi-extension/src/mi-treeview/utils.ts diff --git a/workspaces/mi/mi-extension/package.json b/workspaces/mi/mi-extension/package.json index bdc8564aa5f..c35c947ca42 100644 --- a/workspaces/mi/mi-extension/package.json +++ b/workspaces/mi/mi-extension/package.json @@ -165,51 +165,19 @@ } } }, - "viewsContainers": { - "activitybar": [ - { - "id": "micro-integrator", - "title": "WSO2 Integrator: MI", - "icon": "assets/icon.svg" - } - ] - }, - "views": { - "micro-integrator": [ - { - "id": "MI.project-explorer", - "name": "Project Explorer" - } - ], - "test": [ - { - "id": "MI.mock-services", - "name": "Mock Services" - } - ] - }, "viewsWelcome": [ { - "view": "MI.project-explorer", + "view": "wso2-integrator.explorer", "contents": "Loading...", "when": "MI.status != 'unknownProject' && MI.status != 'projectLoaded' && MI.status != 'disabled' && MI.status != 'notSetUp'" }, { - "view": "MI.project-explorer", - "contents": "Welcome to WSO2 Integrator: MI. You can open a folder containing a MI project or create a new project.\n[Open MI Project](command:MI.openProject)\n[Create New Project](command:MI.project-explorer.create-project)\nTo learn more about how to use WSO2 Integrator: MI in VS Code, [read our docs](https://mi.docs.wso2.com/en/4.3.0/develop/mi-for-vscode/mi-for-vscode-overview/).", - "when": "MI.status == 'unknownProject'" - }, - { - "view": "MI.project-explorer", + "view": "wso2-integrator.explorer", "contents": "Some errors occurred while activating the extension. Please check the output channel for more information.", "when": "MI.status == 'disabled'" }, { - "view": "testing", - "contents": "[Add Unit Test](command:MI.test.add.suite)" - }, - { - "view": "MI.project-explorer", + "view": "wso2-integrator.explorer", "contents": "WSO2 Integrator: MI is not set up. Please set up the MI server and Java home to continue.", "when": "MI.status == 'notSetUp'" } @@ -1043,4 +1011,4 @@ "find-process": "~1.4.10", "dotenv": "~16.5.0" } -} +} \ No newline at end of file diff --git a/workspaces/mi/mi-extension/src/project-explorer/activate.ts b/workspaces/mi/mi-extension/src/project-explorer/activate.ts index dbd74d9f170..e7bdcb1d5a5 100644 --- a/workspaces/mi/mi-extension/src/project-explorer/activate.ts +++ b/workspaces/mi/mi-extension/src/project-explorer/activate.ts @@ -47,7 +47,7 @@ export async function activateProjectExplorer(context: ExtensionContext, lsClien const projectExplorerDataProvider = new ProjectExplorerEntryProvider(context); await projectExplorerDataProvider.refresh(); let registryExplorerDataProvider; - const projectTree = window.createTreeView('MI.project-explorer', { treeDataProvider: projectExplorerDataProvider }); + const projectTree = window.createTreeView('wso2-integrator.explorer', { treeDataProvider: projectExplorerDataProvider }); const projectDetailsRes = await lsClient?.getProjectDetails(); const runtimeVersion = projectDetailsRes.primaryDetails.runtimeVersion.value; diff --git a/workspaces/mi/mi-extension/src/stateMachine.ts b/workspaces/mi/mi-extension/src/stateMachine.ts index 765a408a093..bc980a4ec94 100644 --- a/workspaces/mi/mi-extension/src/stateMachine.ts +++ b/workspaces/mi/mi-extension/src/stateMachine.ts @@ -36,10 +36,10 @@ const fs = require('fs'); interface MachineContext extends VisualizerLocation { langClient: ExtendedLanguageClient | null; dependenciesResolved?: boolean; + isProject?: boolean; } const stateMachine = createMachine({ - /** @xstate-layout N4IgpgJg5mDOIC5QFsCWA6VA7VAXVAhgDaoBeYAxBAPZZiZYBu1A1vQMYAWY7LACgCdqAKx64A2gAYAuolAAHarDypackAA9EAJm0A2dJICs2yQE49k7QEYT1vXoA0IAJ469ADnTWPAdiOSDkY+gX4AvmHOaAwqxGSUNHQMzGzoXDz8QqLsEtaySCCKyvhqBVoINgbGphZWtpVOrojW-uhGetomehYWHtpmRhFRGNixJORUtPTYKRzcvIIiYuLa+QpKKqWg5aZVJuaWNnYOzm4IfehmAMy+ACz+vleS1mbaV9pDINGj+HETidMmKw5hlFtkJFc1oUNiUsOodlc9jVDvV7I0zlcBug7k9btdfHpbHjPt8cL9xgkpslgWl5pkljlxLcoUVNnCyjpbkiDnVjujEITtOgPCKRf1Xo9jCSRmTCBSKGABEIBOh5EQCLgAGbUATIWmgrLLGTqVmw+GIEynZoedroLmPW67PoEjzStK0Og5HUASTJkySMxp0XYHrEPrJCED7A1qiwUmk8ZNMNj5oQvjMt0Mt3svg8xl8L35FSMV28RjMjxMHgs7w8ejd8kNOQAImBcGJIP7AbN0NFGwzcK32zlIJGgdHYfHEwVTSmOQgOlaEPYWpc9I8M9ZbpJbqK3dQiBAwWIhx2IF3qalogej03B22z2PmBPY1PjTPk1tNIhfNol7ZfEkO112zHcrm3FpfDdIhYF9PAL0DK8MBguDcCfagX1oN8WU-dltkQe4jGxQCPExDxbluTEzGsf8iXQJ4jBLSwAj0K4Xmg2C-QBS96GiFCIyjGMsJkcQ8iTYo53whAuSI3wSLIiiqJoppl0Cax0E8Yx2kRG1JFdSIvmQzj4MVZVVXVLUdT1PjjLQwTJxE991gkr9ykI4i9IUyizGo-9CQMbo9BLEtAiMPo3QEMACAgFx0AIHJUEYDUwAAeVwbgBAAMSi3AAFdItgBCgSQ9BIui2L4vwJL2zSjLso1fK4HQzC40cnCXLw79VOubxbjCm4rhFDpJF8f9fy8UijD68jrCsfRBgM6Iypi9BGFQMAAHcABlqGi7AoCKnslqila1s2na9qwKBmqE1qEyc6EOtTWwOmFPRpu0G08QGUaVPsIxfHQbRfwzbcnjzFoIpO2Kzo2zLsAgfbDqDDBlph9a4YR-aboc+72rZZ6My8V5uhuEUKxuIw-PA7FZsdDxbERK4rgW4ZSuh1aMYAZVweKWCR7jEN41GOdhnm+ex+zXza8SCfnN4bDtewKLkl5Qb8gGgZBijJHB54oMWkXys5zaAFV5AgZLz0F4rhfZ43YfNy32wgHHpbx2WzXnFpWOFZmXkkQOt06P8-sU4DdfA9MOlJqGHYxgA5Ag1qgK3kZKtGTY2pOU6tt3hI9j8nvl951Ozd77gLHyKP-d4hW8rkgjCkw49OjGACVoYoFK+AAUQTgB9AA1b1e4AdWnZy5ak2aeq3frHiG0xfrOexmaB2abgeaj3tZwz7bbzbO-Kih297vgtoAQQAYV74fR4nh7Z1c5pzFLefSMXutl--EtAeb-oIEGZWH0mzTOsNj4xQoAnS+I8ADil8AAqvdJ6PWnl1We79poDSXiNf8FF1K1BZiHIK5Y97HXjkfLumVvRbTvr3Zs3pEGoOfp1comDeoL0Gt-PBf1TBAR8BmQk9xtykWsK3dGm1e6I3wFdCgDCmED2bClBOKCn64Wei8UsZhqxBXXBWOs1hQ6ry3GYDS1ZsxvApgDchGA6AbWPDkLOF1EZyJtkdOxm1HG4GcbtVx10pYFxYRo+cDN1KWEdC0AYg0WYrx-FYei9wbAZmop9DMbp7HeKzpAlw3c+6DxHuPYJxcpLfzaGxYGgR9C2GuEuSwBhfy6FmjYfwoMIgGSwNQCAcB1BoE9pJLqABaIswzDCB3GRMoOW43Q-DlPEfpL9pLGJ-LoNo1hMSfReFNVitw3QhiwJ6XA4Y8ALLYRaN4Gl54+WIdYZWS5OjqW4dROm2ZfwswbHeU8I4ICnOejueu9xqIUUdGFe5wR6Lk1uTuV5bxbHoBvN4r5LtfnzmCKWYR5Zrh2DuSpBm3gHDrlmoHLemIOKoRRVJYGQpej+CsISNeyzlzlnReBYwEFczMQkRSrqjwDCYjCv0Fo-RcweH-FUtougGb9CmuBBwEi4oJWqqldKip6p5QKty8ouZMz8r6NREGIqxo7jaHUHwn1WmgP3uAjGLj9qauaMzMxfgAgMyjqYq41NqWYksJiPSLR3jythvDLA-j7XLgJKWUibEzDjODpaP6rEvVEJjQzR4HxDYH0kRtcWvA7VF3QTsW5hCfLkXAv1KanrLjet1im-16awGiwxk7K2YaXpeCeKYIxu5tzbPwdmcxAxZqMT0npS1FDD7Z2TqgVOyL81e0pcEPlFcTA2EpoyrcFFvDVmCFpEdIpA0d2hmG6sgNA79D6l29ZBJaKvTrHmZ4LNmZsQPVImReap7zowY64UtLXX3HdbRMKWtgYlmos8PqbpEawAIAAIyIJAMNu8N5+FzKYci5Fbj-lImYhwfguRckCCCjJXi7xhuCpcvqjx-adFBSpYIZjGKMQ2UK+wY7PEOLvL4y6UAyOkQowDJ9RjGKipUoSJ1Qm2U7OBsRjjA5slHrnQM9hzwhQAzSc8Ewry6k3DenmKa5YCwvANhEIAA */ id: 'mi', initial: 'initialize', predictableActionArguments: true, @@ -48,7 +48,8 @@ const stateMachine = createMachine({ langClient: null, errors: [], view: MACHINE_VIEW.Welcome, - dependenciesResolved: false + dependenciesResolved: false, + isProject: false }, states: { initialize: { @@ -61,7 +62,8 @@ const stateMachine = createMachine({ target: 'environmentSetup', cond: (context, event) => (event.data.isProject === true || event.data.isOldProject === true) && event.data.isEnvironmentSetUp === false, actions: assign({ - view: (context, event) => MACHINE_VIEW.SETUP_ENVIRONMENT + view: (context, event) => MACHINE_VIEW.SETUP_ENVIRONMENT, + isProject: (context, event) => event.data.isProject }) }, { @@ -74,6 +76,7 @@ const stateMachine = createMachine({ projectUri: (context, event) => event.data.projectUri, isOldProject: (context, event) => true, displayOverview: (context, event) => true, + isProject: (context, event) => false }) }, { @@ -85,17 +88,18 @@ const stateMachine = createMachine({ view: (context, event) => MACHINE_VIEW.UnsupportedWorkspace, projectUri: (context, event) => event.data.projectUri, displayOverview: (context, event) => true, + isProject: (context, event) => false }) }, { target: 'lsInit', cond: (context, event) => - event.data.isOldProject || event.data.isProject, + event.data.isProject === true, actions: assign({ view: (context, event) => event.data.view, customProps: (context, event) => event.data.customProps, projectUri: (context, event) => event.data.projectUri, - isOldProject: (context, event) => event.data.isOldProject, + isProject: (context, event) => true, displayOverview: (context, event) => event.data.displayOverview }) }, @@ -104,7 +108,8 @@ const stateMachine = createMachine({ // Assuming false means new project cond: (context, event) => event.data.isProject === false && event.data.isOldProject === false, actions: assign({ - view: (context, event) => MACHINE_VIEW.Welcome + view: (context, event) => MACHINE_VIEW.Welcome, + isProject: (context, event) => false }) } // No need for an explicit action for the false case unless you want to assign something specific @@ -113,7 +118,8 @@ const stateMachine = createMachine({ target: 'disabled', actions: assign({ view: (context, event) => MACHINE_VIEW.Disabled, - errors: (context, event) => event.data + errors: (context, event) => event.data, + isProject: (context, event) => false }) } } @@ -168,17 +174,24 @@ const stateMachine = createMachine({ onDone: [ { target: 'ready', - cond: (context, event) => context.displayOverview === true, + cond: (context, event) => context.isProject === true && context.displayOverview === true, actions: assign({ langClient: (context, event) => event.data }) }, { target: 'ready.viewReady', - cond: (context, event) => context.displayOverview === false, + cond: (context, event) => context.isProject === true && context.displayOverview === false, actions: assign({ langClient: (context, event) => event.data }) + }, + { + target: 'disabled', + cond: (context, event) => context.isProject !== true, + actions: assign({ + view: (context, event) => MACHINE_VIEW.Disabled + }) } ], onError: { @@ -419,6 +432,12 @@ const stateMachine = createMachine({ if (!context?.projectUri) { return reject(new Error("Project URI is not defined")); } + + if (context.isProject !== true) { + log("Skipping webview creation - not a valid MI project"); + return resolve(true); + } + if (!webviews.has(context.projectUri)) { const panel = new VisualizerWebview(context.view!, context.projectUri, extension.webviewReveal); webviews.set(context.projectUri!, panel); @@ -451,6 +470,11 @@ const stateMachine = createMachine({ }, resolveMissingDependencies: (context, event) => { return new Promise(async (resolve, reject) => { + if (context.isProject !== true) { + log("Skipping dependency resolution - not a valid MI project"); + return resolve(true); + } + if (!context?.projectUri) { return reject(new Error("Project URI is not defined")); } @@ -465,6 +489,11 @@ const stateMachine = createMachine({ }, findView: (context, event): Promise => { return new Promise(async (resolve, reject) => { + if (context.isProject !== true) { + log("Skipping view finding - not a valid MI project"); + return resolve(context as VisualizerLocation); + } + const langClient = context.langClient!; const viewLocation = context; @@ -657,6 +686,11 @@ const stateMachine = createMachine({ }, activateOtherFeatures: (context, event) => { return new Promise(async (resolve, reject) => { + if (context.isProject !== true) { + log("Skipping feature activation - not a valid MI project"); + return resolve(true); + } + const ls = await MILanguageClient.getInstance(context.projectUri!); await activateProjectExplorer(extension.context, ls.languageClient!); await activateTestExplorer(extension.context); @@ -672,6 +706,11 @@ const stateMachine = createMachine({ }, focusProjectExplorer: (context, event) => { return new Promise(async (resolve, reject) => { + if (context.isProject !== true) { + log("Skipping project explorer focus - not a valid MI project"); + return resolve(true); + } + vscode.commands.executeCommand(COMMANDS.FOCUS_PROJECT_EXPLORER); resolve(true); }); @@ -814,6 +853,16 @@ function updateProjectExplorer(location: VisualizerLocation | undefined) { if (location && location.documentUri) { const projectRoot = vscode.workspace.getWorkspaceFolder(vscode.Uri.file(location.documentUri))?.uri?.fsPath; + if (projectRoot) { + const stateMachine = getStateMachine(projectRoot); + const context = stateMachine?.context(); + + if (context?.isProject !== true) { + log("Skipping project explorer update - not a valid MI project"); + return; + } + } + const relativePath = vscode.workspace.asRelativePath(location.documentUri); const isTestFile = relativePath.startsWith(`src${path.sep}test${path.sep}`); if (isTestFile) { diff --git a/workspaces/mi/mi-extension/src/visualizer/activate.ts b/workspaces/mi/mi-extension/src/visualizer/activate.ts index a1d53917360..acf791a1a2e 100644 --- a/workspaces/mi/mi-extension/src/visualizer/activate.ts +++ b/workspaces/mi/mi-extension/src/visualizer/activate.ts @@ -39,51 +39,57 @@ import { getHash } from '../util/fileOperations'; export function activateVisualizer(context: vscode.ExtensionContext, firstProject: string) { context.subscriptions.push( - vscode.commands.registerCommand(COMMANDS.OPEN_PROJECT, () => { - window.showOpenDialog({ canSelectFolders: true, canSelectFiles: true, filters: { 'CAPP': ['car', 'zip'] }, openLabel: 'Open MI Project' }) - .then(uri => { - if (uri && uri[0]) { - const handleOpenProject = (folderUri: vscode.Uri) => { - window.showInformationMessage('Where would you like to open the project?', - { modal: true }, - 'Current Window', - 'New Window' - ).then(selection => { - if (selection === "Current Window") { - const workspaceFolders = workspace.workspaceFolders || []; - if (!workspaceFolders.some(folder => folder.uri.fsPath === folderUri.fsPath)) { - workspace.updateWorkspaceFolders(workspaceFolders.length, 0, { uri: folderUri }); - } - } else if (selection === "New Window") { - commands.executeCommand('vscode.openFolder', folderUri); + vscode.commands.registerCommand(COMMANDS.OPEN_PROJECT, (providedUri?: vscode.Uri) => { + const processUri = (uri: vscode.Uri[] | undefined) => { + if (uri && uri[0]) { + const handleOpenProject = (folderUri: vscode.Uri) => { + window.showInformationMessage('Where would you like to open the project?', + { modal: true }, + 'Current Window', + 'New Window' + ).then(selection => { + if (selection === "Current Window") { + const workspaceFolders = workspace.workspaceFolders || []; + if (!workspaceFolders.some(folder => folder.uri.fsPath === folderUri.fsPath)) { + workspace.updateWorkspaceFolders(workspaceFolders.length, 0, { uri: folderUri }); + } + } else if (selection === "New Window") { + commands.executeCommand('vscode.openFolder', folderUri); + } + }); + }; + if (uri[0].fsPath.endsWith('.car') || uri[0].fsPath.endsWith('.zip')) { + window.showInformationMessage('A car file (CAPP) is selected.\n Do you want to extract it?', { modal: true }, 'Extract') + .then(option => { + if (option === 'Extract') { + window.showOpenDialog({ canSelectFolders: true, canSelectFiles: false, title: 'Select the location to extract the CAPP', openLabel: 'Select Folder' }) + .then(extractUri => { + if (extractUri && extractUri[0]) { + importCapp({ source: uri[0].fsPath, directory: extractUri[0].fsPath, open: false }); + handleOpenProject(extractUri[0]); + } + }); } }); - }; - if (uri[0].fsPath.endsWith('.car') || uri[0].fsPath.endsWith('.zip')) { - window.showInformationMessage('A car file (CAPP) is selected.\n Do you want to extract it?', { modal: true }, 'Extract') - .then(option => { - if (option === 'Extract') { - window.showOpenDialog({ canSelectFolders: true, canSelectFiles: false, title: 'Select the location to extract the CAPP', openLabel: 'Select Folder' }) - .then(extractUri => { - if (extractUri && extractUri[0]) { - importCapp({ source: uri[0].fsPath, directory: extractUri[0].fsPath, open: false }); - handleOpenProject(extractUri[0]); - } - }); - } - }); + } else { + const webview = [...webviews.values()].find(webview => webview.getWebview()?.active) || [...webviews.values()][0]; + const projectUri = webview ? webview.getProjectUri() : firstProject; + const projectOpened = getStateMachine(projectUri).context().projectOpened; + if (projectOpened) { + handleOpenProject(uri[0]); } else { - const webview = [...webviews.values()].find(webview => webview.getWebview()?.active) || [...webviews.values()][0]; - const projectUri = webview ? webview.getProjectUri() : firstProject; - const projectOpened = getStateMachine(projectUri).context().projectOpened; - if (projectOpened) { - handleOpenProject(uri[0]); - } else { - commands.executeCommand('vscode.openFolder', uri[0]); - } + commands.executeCommand('vscode.openFolder', uri[0]); } } - }); + } + }; + + if (providedUri) { + processUri([providedUri]); + } else { + window.showOpenDialog({ canSelectFolders: true, canSelectFiles: true, filters: { 'CAPP': ['car', 'zip'] }, openLabel: 'Open MI Project' }) + .then(processUri); + } }), commands.registerCommand(COMMANDS.CREATE_PROJECT_COMMAND, async (args) => { if (args && args.name && args.path && args.scope) { diff --git a/workspaces/wi/wi-extension/package.json b/workspaces/wi/wi-extension/package.json index 7a01ce5589f..9b03f6141f7 100644 --- a/workspaces/wi/wi-extension/package.json +++ b/workspaces/wi/wi-extension/package.json @@ -19,7 +19,8 @@ "onStartupFinished" ], "extensionDependencies": [ - "wso2.ballerina" + "wso2.ballerina", + "wso2.micro-integrator" ], "main": "./dist/extension.js", "contributes": { @@ -205,6 +206,7 @@ "@wso2/wi-core": "workspace:*", "vscode-messenger": "~0.5.1", "@wso2/ballerina-core": "workspace:*", + "@wso2/micro-integrator-core": "workspace:*", "@wso2/font-wso2-vscode": "workspace:*", "xstate": "~4.38.3" } diff --git a/workspaces/wi/wi-extension/src/extension.ts b/workspaces/wi/wi-extension/src/extension.ts index 73ce8d7f171..bc990dc1c1d 100644 --- a/workspaces/wi/wi-extension/src/extension.ts +++ b/workspaces/wi/wi-extension/src/extension.ts @@ -24,6 +24,7 @@ import { WebviewManager } from "./webviewManager"; import { StateMachine } from "./bi-treeview/stateMachine"; import { extension } from "./bi-treeview/biExtentionContext"; import { fetchProjectInfo } from "./bi-treeview/utils"; +import { checkIfMiProject } from "./mi-treeview/utils"; /** * Activate the extension @@ -46,13 +47,17 @@ export async function activate(context: vscode.ExtensionContext): Promise // if (extensionAPIs.isBIAvailable()) { const ballerinaExt = vscode.extensions.getExtension('wso2.ballerina'); const isBalProject = fetchProjectInfo().isBallerina; - if (ballerinaExt && isBalProject) { + const workspaceRoot = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath; + const isMiProject = await checkIfMiProject(workspaceRoot); + + if (!isMiProject && ballerinaExt) { extension.context = context; extension.langClient = ballerinaExt.exports.ballerinaExtInstance.langClient; extension.biSupported = ballerinaExt.exports.ballerinaExtInstance.biSupported; extension.isNPSupported = ballerinaExt.exports.ballerinaExtInstance.isNPSupported; StateMachine.initialize(); } + // Create webview manager const webviewManager = new WebviewManager(extensionAPIs); context.subscriptions.push({ diff --git a/workspaces/wi/wi-extension/src/mi-treeview/utils.ts b/workspaces/wi/wi-extension/src/mi-treeview/utils.ts new file mode 100644 index 00000000000..9313670e802 --- /dev/null +++ b/workspaces/wi/wi-extension/src/mi-treeview/utils.ts @@ -0,0 +1,44 @@ +/** + * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as fs from 'fs'; +import * as path from 'path'; +import { ext } from '../extensionVariables'; + + +export async function checkIfMiProject(projectUri: string): Promise { + ext.log(`Detecting MI project in ${projectUri} - ${new Date().toLocaleTimeString()}`); + + try { + // Check for pom.xml files excluding node_modules directory + const pomFilePath = path.join(projectUri, 'pom.xml'); + if (fs.existsSync(pomFilePath)) { + const pomContent = await fs.promises.readFile(pomFilePath, 'utf-8'); + const isProject = pomContent.includes('integration-project'); + if (isProject) { + ext.log("MI project detected in " + projectUri); + return true; + } + } + + return false; + } catch (error) { + ext.logError('Failed to detect MI project', error as Error); + return false; + } +} From 2d3a9bf10100d7065d9700d6792cc81116f4859b Mon Sep 17 00:00:00 2001 From: kaumini Date: Mon, 10 Nov 2025 02:42:49 +0530 Subject: [PATCH 08/55] Add new welcome view to WSO2 Integrator --- .../src/views/BI/WelcomeView/index.tsx | 587 +++++++++--------- 1 file changed, 309 insertions(+), 278 deletions(-) diff --git a/workspaces/ballerina/ballerina-visualizer/src/views/BI/WelcomeView/index.tsx b/workspaces/ballerina/ballerina-visualizer/src/views/BI/WelcomeView/index.tsx index 0f910f22e9c..1f75d7ec258 100644 --- a/workspaces/ballerina/ballerina-visualizer/src/views/BI/WelcomeView/index.tsx +++ b/workspaces/ballerina/ballerina-visualizer/src/views/BI/WelcomeView/index.tsx @@ -16,75 +16,107 @@ * under the License. */ -import React, { useState } from "react"; -import { MACHINE_VIEW, EVENT_TYPE, DownloadProgress } from "@wso2/ballerina-core"; +import { MACHINE_VIEW, EVENT_TYPE } from "@wso2/ballerina-core"; import { useRpcContext } from "@wso2/ballerina-rpc-client"; import styled from "@emotion/styled"; -import { Button, Codicon, Icon, ThemeColors } from "@wso2/ui-toolkit"; -import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"; +import { Button, Codicon, Icon } from "@wso2/ui-toolkit"; const Wrapper = styled.div` - max-width: 1000px; - margin: 0 auto; - padding: 32px 20px; - height: calc(100vh - 40px); + max-width: 100%; + margin: 0; + padding: 0; + height: 100vh; overflow-y: auto; font-family: var(--vscode-font-family); + background: var(--vscode-sideBar-background); `; -const HeaderSection = styled.div` - margin-bottom: 32px; - padding: 20px 0; -`; - -const Headline = styled.h1` - font-size: 24px; - font-weight: 600; - margin: 0 0 12px 0; - color: var(--vscode-foreground); - line-height: 1.3; +const TopSection = styled.div` + background: linear-gradient(135deg, #667eea 0%, #204377 100%); + padding: 40px 60px 80px; + position: relative; + display: flex; + flex-direction: column; `; -const Caption = styled.p` +const ConfigureButton = styled(Button)` + position: absolute; + top: 40px; + right: 60px; + height: 33px !important; font-size: 14px; - line-height: 1.4; - font-weight: 400; - color: var(--vscode-descriptionForeground); - margin: 0; - max-width: 700px; + font-weight: 500; + border-radius: 8px; + padding: 0 24px; + background: var(--button-secondary-background); + color: white; + border: none; + transition: all 0.2s ease; + display: flex; + align-items: center; + gap: 8px; + + &:hover:not(:disabled) { + background: var(--button-secondary-hover-background); + transform: translateY(-1px); + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } `; -const GetStartedSection = styled.div` - background: var(--vscode-editor-background); - border: 1px solid var(--vscode-panel-border); - border-radius: 3px; - padding: 16px 20px; +const GetStartedBadge = styled.div` + display: inline-block; + background: rgba(255, 255, 255, 0.2); + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.3); + border-radius: 20px; + padding: 8px 16px; margin-bottom: 24px; + font-size: 13px; + color: white; + font-weight: 500; + width: 106px; `; -const GetStartedTitle = styled.h2` +const Headline = styled.h1` + font-size: 48px; + font-weight: 700; + margin: 0; + color: white; + line-height: 1.2; + letter-spacing: -0.5px; +`; + +const Caption = styled.p` font-size: 16px; - font-weight: 600; - margin: 0 0 8px 0; - color: var(--vscode-foreground); + line-height: 1.6; + font-weight: 400; + color: rgba(255, 255, 255, 0.9); + margin: 16px 0 0 0; + max-width: 800px; `; -const GetStartedText = styled.p` - font-size: 13px; - margin: 0; - color: var(--vscode-descriptionForeground); - line-height: 1.4; +const CardsContainer = styled.div` + padding: 0 60px 60px; + margin-top: -40px; + position: relative; + z-index: 1; `; -const MainActionsGrid = styled.div` +const CardsGrid = styled.div` display: grid; grid-template-columns: repeat(3, 1fr); - gap: 16px; - margin-bottom: 32px; + gap: 24px; + + @media (max-width: 1200px) { + grid-template-columns: repeat(2, 1fr); + } - @media (max-width: 900px) { + @media (max-width: 768px) { grid-template-columns: 1fr; - gap: 12px; } `; @@ -95,139 +127,190 @@ interface ActionCardProps { const ActionCard = styled.div` background: var(--vscode-editor-background); - border: 1px solid var(--vscode-panel-border); - border-radius: 3px; - padding: 20px 16px; + border-radius: 12px; + padding: 32px 24px; display: flex; flex-direction: column; - transition: border-color 0.2s ease; + transition: all 0.3s ease; cursor: ${(props: ActionCardProps) => (props.disabled ? "not-allowed" : "pointer")}; opacity: ${(props: ActionCardProps) => (props.disabled ? 0.6 : 1)}; - min-height: 180px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); + border: 1px solid var(--vscode-widget-border, rgba(255, 255, 255, 0.1)); + min-height: 280px; &:hover { ${(props: ActionCardProps) => !props.disabled && ` - border-color: ${ThemeColors.PRIMARY}; - box-shadow: 0 0 0 2px ${ThemeColors.PRIMARY_CONTAINER}; + transform: translateY(-4px); + box-shadow: 0 8px 16px rgba(0,0,0,0.25); + background: var(--vscode-list-hoverBackground); `} } `; interface CardIconProps { - isPrimary?: boolean; + bgColor?: string; } const CardIconContainer = styled.div` display: flex; justify-content: flex-start; - margin-bottom: 12px; + margin-bottom: 20px; `; const CardIcon = styled.div` - width: 32px; - height: 32px; - border-radius: 2px; + width: 56px; + height: 56px; + border-radius: 12px; display: flex; align-items: center; justify-content: center; - color: ${ThemeColors.ON_SURFACE}; - background-color: ${ThemeColors.SURFACE_CONTAINER}; + background: ${(props: CardIconProps) => props.bgColor || "linear-gradient(135deg, #667eea 0%, #764ba2 100%)"}; + color: white; flex-shrink: 0; - & > div { - margin-left: -4px; - } `; const CardContent = styled.div` flex: 1; display: flex; flex-direction: column; - text-align: left; `; const CardTitle = styled.h3` - font-size: 16px; + font-size: 20px; font-weight: 600; - margin: 0 0 8px 0; + margin: 0 0 12px 0; color: var(--vscode-foreground); - line-height: 1.3; `; const CardDescription = styled.p` - font-size: 13px; - line-height: 1.4; - margin: 0 0 16px 0; + font-size: 14px; + line-height: 1.6; + margin: 0 0 24px 0; color: var(--vscode-descriptionForeground); flex: 1; `; -const StyledButton = styled(Button)` - height: 36px; - font-size: 13px; - font-weight: 400; - border-radius: 2px; +const StyledButton = styled(Button)<{ isPrimary?: boolean }>` + height: 44px; + font-size: 14px; + font-weight: 500; + border-radius: 8px; align-self: flex-start; + padding: 0 24px; + background: ${(props: { isPrimary?: boolean }) => + props.isPrimary ? 'var(--button-primary-background)' : 'var(--button-secondary-background)'}; + color: white; + border: none; + transition: all 0.2s ease; + + &:hover:not(:disabled) { + background: ${(props: { isPrimary?: boolean }) => + props.isPrimary ? 'var(--button-primary-hover-background)' : 'var(--button-secondary-hover-background)'}; + transform: translateY(-1px); + } + + &:disabled { + opacity: 0.5; + cursor: not-allowed; + } `; const ButtonContent = styled.div` display: flex; align-items: center; justify-content: center; - gap: 6px; + gap: 8px; `; -const UpdateNotice = styled.div` - background: var(--vscode-inputValidation-warningBackground); - border: 1px solid var(--vscode-inputValidation-warningBorder); - border-radius: 3px; - padding: 16px; - margin-bottom: 20px; +const BottomSection = styled.div` + padding: 60px 60px 60px; + text-align: center; `; -const UpdateTitle = styled.h4` +const AlreadyHaveText = styled.div` font-size: 14px; - font-weight: 600; - margin: 0 0 8px 0; - color: var(--vscode-inputValidation-warningForeground); + color: var(--vscode-foreground); + opacity: 0.6; + margin-bottom: 32px; + + a { + color: var(--vscode-textLink-foreground); + text-decoration: none; + font-weight: 400; + margin-left: 6px; + cursor: pointer; + + &:hover { + color: var(--vscode-textLink-activeForeground); + text-decoration: underline; + } + } `; -const UpdateDescription = styled.p` - font-size: 13px; - margin: 0 0 12px 0; - color: var(--vscode-foreground); - line-height: 1.4; +const RecentProjectsSection = styled.div` + max-width: 900px; + margin: 0 auto; `; -const ProgressBarWrapper = styled.div` +const RecentProjectsHeader = styled.div` display: flex; + justify-content: space-between; align-items: center; - margin-top: 8px; + margin-bottom: 20px; + padding: 0 4px; `; -const ProgressBarContainer = styled.div` - width: 100%; - height: 3px; - background-color: var(--vscode-progressBar-background); - border-radius: 1px; - overflow: hidden; - position: relative; - opacity: 0.3; +const RecentProjectsTitle = styled.h3` + font-size: 13px; + font-weight: 400; + color: var(--vscode-foreground); + opacity: 0.6; + margin: 0; + text-transform: capitalize; `; -interface ProgressIndicatorProps { - percentage: number; -} +const ViewAllLink = styled.a` + font-size: 13px; + color: var(--vscode-textLink-foreground); + text-decoration: none; + cursor: pointer; + font-weight: 400; + + &:hover { + color: var(--vscode-textLink-activeForeground); + text-decoration: underline; + } +`; -const ProgressIndicator = styled.div` - position: absolute; - width: ${(props: ProgressIndicatorProps) => `${props.percentage}%`}; - height: 100%; - background-color: var(--vscode-progressBar-background); - border-radius: 1px; - transition: width 0.3s ease; - opacity: 1; +const ProjectsList = styled.div` + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 8px 16px; + text-align: left; +`; + +const ProjectItem = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px 4px; + font-size: 13px; + color: var(--vscode-foreground); + cursor: pointer; + transition: all 0.15s ease; + border-radius: 4px; + + &:hover { + background: var(--vscode-list-hoverBackground); + } +`; + +const ProjectPath = styled.span` + color: var(--vscode-descriptionForeground); + font-size: 12px; + margin-left: 12px; `; type WelcomeViewProps = { @@ -236,8 +319,6 @@ type WelcomeViewProps = { export function WelcomeView(props: WelcomeViewProps) { const { rpcClient } = useRpcContext(); - const [isLoading, setIsLoading] = useState(false); - const [progress, setProgress] = useState(null); const goToCreateProject = () => { rpcClient.getVisualizerRpcClient().openView({ @@ -248,12 +329,6 @@ export function WelcomeView(props: WelcomeViewProps) { }); }; - const openGettingStartedGuide = () => { - rpcClient.getCommonRpcClient().openExternalUrl({ - url: "https://bi.docs.wso2.com/get-started/quick-start-guide/", - }); - }; - const openSamples = () => { rpcClient.getCommonRpcClient().openExternalUrl({ url: "https://bi.docs.wso2.com/integration-guides/integration-as-api/message-transformation/", @@ -269,173 +344,129 @@ export function WelcomeView(props: WelcomeViewProps) { }); }; - const updateBallerina = () => { - setIsLoading(true); - rpcClient.getCommonRpcClient().executeCommand({ commands: ["ballerina.update-ballerina-visually"] }); + const openConfigure = () => { + // Add configure action here + console.log("Configure clicked"); + }; + + const openProject = () => { + // Add open existing project action here + console.log("Open existing project"); + }; + + const viewAllProjects = () => { + // Add view all projects action here + console.log("View all projects"); }; - rpcClient?.onDownloadProgress((response: DownloadProgress) => { - setIsLoading(true); - setProgress(response); - }); + // Sample recent projects data - replace with actual data + const recentProjects = [ + { name: "vscode-extensions", path: "~/Documents/vscode-extension" }, + { name: "evox-esports-site", path: "~/Documents" }, + { name: "iso-consultancy-portal", path: "~/Documents/ISOWeb" }, + { name: "ISOWeb", path: "~/Documents" }, + { name: "Documents", path: "~" }, + ]; return ( - {/* Header Section */} - - WSO2 Integrator: BI for VS Code + + + + + Configure + + + Get Started + WSO2 Integrator - A comprehensive integration solution that simplifies your digital transformation journey. - Streamlines connectivity among applications, services, data, and cloud using a user-friendly - low-code graphical designing experience. + A comprehensive integration solution that simplifies your digital transformation journey. Streamlines connectivity among applications, services, data, and cloud using a user-friendly low-code graphical designing experience. - - - {/* Get Started Section */} - - Get Started Quickly - - New to WSO2 Integrator: BI? Start here! Explore step-by-step tutorials to help you get up and running - with ease. Read the guide. - - - - {/* Update Notice for Unsupported Version */} - {!props.isBISupported && ( - - Update Required - - Your current Ballerina distribution is not supported. Please update to version 2201.12.3 or - above to access all features. - - - - {isLoading ? ( - <> - - {progress ? `${progress.percentage || 0}%` : "Updating..."} - - ) : ( - <> - - Update Now - - )} - - - {isLoading && progress && ( -
- - - - - - - {progress.message} - -
- )} - {isLoading && ( - - Please restart VS Code after updating the Ballerina distribution - - )} -
- )} - - {/* Main Action Cards */} - - {/* Create New Integration Card */} - - - - - - - - Create New Integration - - Ready to build? Start a new integration project using our intuitive graphical designer. - - { - e.stopPropagation(); - goToCreateProject(); - }} - > - - - Create New Integration - - - - - - {/* Import External Integration Card */} - - - - - - - - Import External Integration - - Have an integration from another platform? Import your MuleSoft or TIBCO integration project - and continue building. - - { - e.stopPropagation(); - importExternalIntegration(); - }} - > - - - Import External Integration - - - - - - {/* Explore Samples Card */} - - - - - - - - Explore Pre-Built Samples - - Need inspiration? Browse through sample projects to see how WSO2 Integrator: BI handles - real-world integrations. - - { - e.stopPropagation(); - openSamples(); - }} - > - - - Explore Samples - - - - - + + + + + + + + + + + + Create New Project + + Ready to build? Start a new integration project using our intuitive graphical designer. + + { e.stopPropagation(); goToCreateProject(); }}> + Create + + + + + + + + + + + + Explore Samples + + Need inspiration? Browse through sample projects to see how WSO2 Integrator works in real-world scenarios. + + { e.stopPropagation(); openSamples(); }}> + Explore + + + + + + + + + + + + Import External Integration + + Have an integration from another platform? Import your MuleSoft or TIBCO integration project and continue building. + + { e.stopPropagation(); importExternalIntegration(); }}> + Import + + + + + + + + + Already have a project? + Open + + + + + Recent projects + View all (11) + + + {recentProjects.map((project, index) => ( + console.log(`Open project: ${project.name}`)}> + {project.name} + {project.path} + + ))} + + +
); } From 4af1d2a9fbdd1943d673ba94c3500073bb5866b5 Mon Sep 17 00:00:00 2001 From: kaumini Date: Mon, 10 Nov 2025 15:36:20 +0530 Subject: [PATCH 09/55] Render wi welcome view --- common/config/rush/pnpm-lock.yaml | 14 +- workspaces/wi/wi-extension/package.json | 27 +- workspaces/wi/wi-extension/src/extension.ts | 19 +- .../wi/wi-extension/src/webviewManager.ts | 9 +- workspaces/wi/wi-webviews/package.json | 4 +- .../wi/wi-webviews/src/views/WelcomeView.tsx | 542 ++++++++++++++---- workspaces/wi/wi-webviews/webpack.config.js | 2 +- 7 files changed, 499 insertions(+), 118 deletions(-) diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 64762612180..1b52cf84336 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -4063,12 +4063,18 @@ importers: ../../workspaces/wi/wi-extension: dependencies: + '@emotion/styled': + specifier: ^11.14.0 + version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@19.1.0))(@types/react@18.2.0)(react@19.1.0) '@wso2/ballerina-core': specifier: workspace:* version: link:../../ballerina/ballerina-core '@wso2/font-wso2-vscode': specifier: workspace:* version: link:../../common-libs/font-wso2-vscode + '@wso2/ui-toolkit': + specifier: workspace:* + version: link:../../common-libs/ui-toolkit '@wso2/wi-core': specifier: workspace:* version: link:../wi-core @@ -4089,7 +4095,7 @@ importers: specifier: 22.15.18 version: 22.15.18 '@types/vscode': - specifier: ^1.84.0 + specifier: ^1.100.0 version: 1.102.0 '@typescript-eslint/eslint-plugin': specifier: ^6.21.0 @@ -4182,12 +4188,18 @@ importers: ../../workspaces/wi/wi-webviews: dependencies: + '@emotion/styled': + specifier: ~11.14.1 + version: 11.14.1(@emotion/react@11.14.0(@types/react@18.2.0)(react@18.2.0))(@types/react@18.2.0)(react@18.2.0) '@pmmmwh/react-refresh-webpack-plugin': specifier: ~0.6.1 version: 0.6.1(@types/webpack@5.28.5(webpack-cli@6.0.1))(react-refresh@0.11.0)(type-fest@4.41.0)(webpack-dev-server@5.2.2)(webpack-hot-middleware@2.26.1)(webpack@5.101.0) '@vscode/webview-ui-toolkit': specifier: ^1.4.0 version: 1.4.0(react@18.2.0) + '@wso2/ui-toolkit': + specifier: workspace:* + version: link:../../common-libs/ui-toolkit '@wso2/wi-core': specifier: workspace:* version: link:../wi-core diff --git a/workspaces/wi/wi-extension/package.json b/workspaces/wi/wi-extension/package.json index 9b03f6141f7..40a981c2ae9 100644 --- a/workspaces/wi/wi-extension/package.json +++ b/workspaces/wi/wi-extension/package.json @@ -24,6 +24,22 @@ ], "main": "./dist/extension.js", "contributes": { + "configuration": { + "type": "object", + "title": "WSO2 Integrator", + "properties": { + "integrator.defaultIntegrator": { + "type": "string", + "default": "WSO2: BI", + "scope": "resource", + "description": "Choose the default integrator for the lowcode experience.", + "enum": [ + "WSO2: BI", + "WSO2: MI" + ] + } + } + }, "viewsContainers": { "activitybar": [ { @@ -173,7 +189,9 @@ "lint": "biome check .", "lint:fix": "biome check --write .", "vscode:prepublish": "npm run build", - "build": "webpack --mode production", + "build": "webpack --mode production && npm run postbuild", + "postbuild": "npm run copyJSLibs", + "copyJSLibs": "copyfiles -f ../wi-webviews/lib/main.js resources/jslibs", "watch": "tsc -p . -w", "compile": "tsc -p ./", "compile-tests": "tsc -p . --outDir out", @@ -182,7 +200,7 @@ }, "devDependencies": { "@vscode/vsce": "^3.4.0", - "@types/vscode": "^1.84.0", + "@types/vscode": "^1.100.0", "@types/mocha": "^10.0.3", "@types/node": "22.15.18", "@typescript-eslint/eslint-plugin": "^6.21.0", @@ -206,8 +224,9 @@ "@wso2/wi-core": "workspace:*", "vscode-messenger": "~0.5.1", "@wso2/ballerina-core": "workspace:*", - "@wso2/micro-integrator-core": "workspace:*", "@wso2/font-wso2-vscode": "workspace:*", - "xstate": "~4.38.3" + "xstate": "~4.38.3", + "@emotion/styled": "^11.14.0", + "@wso2/ui-toolkit": "workspace:*" } } \ No newline at end of file diff --git a/workspaces/wi/wi-extension/src/extension.ts b/workspaces/wi/wi-extension/src/extension.ts index bc990dc1c1d..08dfcd07a9c 100644 --- a/workspaces/wi/wi-extension/src/extension.ts +++ b/workspaces/wi/wi-extension/src/extension.ts @@ -50,19 +50,24 @@ export async function activate(context: vscode.ExtensionContext): Promise const workspaceRoot = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath; const isMiProject = await checkIfMiProject(workspaceRoot); - if (!isMiProject && ballerinaExt) { + if (isBalProject && ballerinaExt) { extension.context = context; extension.langClient = ballerinaExt.exports.ballerinaExtInstance.langClient; extension.biSupported = ballerinaExt.exports.ballerinaExtInstance.biSupported; extension.isNPSupported = ballerinaExt.exports.ballerinaExtInstance.isNPSupported; StateMachine.initialize(); + } else if (!isMiProject) { + // Create webview manager for WI + const webviewManager = new WebviewManager(extensionAPIs); + context.subscriptions.push({ + dispose: () => webviewManager.dispose(), + }); + + // Register commands + registerCommands(context, webviewManager, extensionAPIs); + + webviewManager.showWelcome(); } - - // Create webview manager - const webviewManager = new WebviewManager(extensionAPIs); - context.subscriptions.push({ - dispose: () => webviewManager.dispose(), - }); ext.log("WSO2 Integrator Extension activated successfully"); } catch (error) { diff --git a/workspaces/wi/wi-extension/src/webviewManager.ts b/workspaces/wi/wi-extension/src/webviewManager.ts index dd9558aeec9..5e1a903a914 100644 --- a/workspaces/wi/wi-extension/src/webviewManager.ts +++ b/workspaces/wi/wi-extension/src/webviewManager.ts @@ -100,7 +100,6 @@ export class WebviewManager { const cspSource = isDevMode ? `${webview.cspSource} http://localhost:* ws://localhost:*` : webview.cspSource; - const styles = ` .container { background-color: var(--vscode-editor-background); @@ -196,12 +195,14 @@ export class WebviewManager { return ` - - + + + WSO2 Integrator +
@@ -214,7 +215,7 @@ export class WebviewManager { ` + ); + + this._panel.webview.html = htmlWithStyleRemoval; + } + + public static createOrShow(fileName: string, reportContent: string): void { + if (MigrationReportWebview.currentPanel) { + MigrationReportWebview.currentPanel._panel.reveal(ViewColumn.Active); + MigrationReportWebview.currentPanel.updateContent(reportContent); + return; + } + + const panel = window.createWebviewPanel( + "migrationReport", + `Migration Report`, + ViewColumn.Active, + { + enableScripts: true, + retainContextWhenHidden: true, + } + ); + + panel.iconPath = { + light: Uri.file(path.join(extension.context.extensionPath, "resources", "icons", "light-icon.svg")), + dark: Uri.file(path.join(extension.context.extensionPath, "resources", "icons", "dark-icon.svg")), + }; + + MigrationReportWebview.currentPanel = new MigrationReportWebview(panel, reportContent); + } + + private updateContent(reportContent: string): void { + const htmlWithStyleRemoval = reportContent.replace( + "", + `` + ); + + this._panel.webview.html = htmlWithStyleRemoval; + } + + public dispose(): void { + MigrationReportWebview.currentPanel = undefined; + this._panel.dispose(); + + while (this._disposables.length) { + const disposable = this._disposables.pop(); + if (disposable) { + disposable.dispose(); + } + } + } +} diff --git a/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-handler.ts b/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-handler.ts index bb7cbcfc651..ca1bc59ba02 100644 --- a/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-handler.ts +++ b/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-handler.ts @@ -37,6 +37,8 @@ import { pullMigrationTool, importIntegration, showErrorMessage, + openMigrationReport, + saveMigrationReport, RunCommandRequest, FileOrDirRequest, GetConfigurationRequest, @@ -47,7 +49,9 @@ import { MigrateRequest, PullMigrationToolRequest, ImportIntegrationRPCRequest, - ShowErrorMessageRequest + ShowErrorMessageRequest, + OpenMigrationReportRequest, + SaveMigrationReportRequest } from "@wso2/wi-core"; import { Messenger } from "vscode-messenger"; import { MainRpcManager } from "./rpc-manager"; @@ -73,4 +77,6 @@ export function registerMainRpcHandlers(messenger: Messenger) { messenger.onRequest(pullMigrationTool, (args: PullMigrationToolRequest) => rpcManger.pullMigrationTool(args)); messenger.onRequest(importIntegration, (args: ImportIntegrationRPCRequest) => rpcManger.importIntegration(args)); messenger.onRequest(showErrorMessage, (args: ShowErrorMessageRequest) => rpcManger.showErrorMessage(args)); + messenger.onRequest(openMigrationReport, (args: OpenMigrationReportRequest) => rpcManger.openMigrationReport(args)); + messenger.onRequest(saveMigrationReport, (args: SaveMigrationReportRequest) => rpcManger.saveMigrationReport(args)); } diff --git a/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts b/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts index f7b9ad25373..5f1fdda412c 100644 --- a/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts +++ b/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts @@ -51,6 +51,8 @@ import * as path from "path"; import axios from "axios"; import { extension } from "../../bi/biExtentionContext"; import { pullMigrationTool } from "./migrate-integration"; +import { MigrationReportWebview } from "../../migration-report/webview"; +import { OpenMigrationReportRequest, SaveMigrationReportRequest } from "@wso2/ballerina-core"; export class MainRpcManager implements WIVisualizerAPI { constructor(private projectUri?: string) { } @@ -327,4 +329,27 @@ export class MainRpcManager implements WIVisualizerAPI { messageWithLink.appendMarkdown(`\n\nPlease [create an issue](${BALLERINA_INTEGRATOR_ISSUES_URL}) if the issue persists.`); window.showErrorMessage(messageWithLink.value); } + + async openMigrationReport(params: OpenMigrationReportRequest): Promise { + MigrationReportWebview.createOrShow(params.fileName, params.reportContent); + } + + async saveMigrationReport(params: SaveMigrationReportRequest): Promise { + const vscode = await import('vscode'); + + // Show save dialog + const saveUri = await vscode.window.showSaveDialog({ + defaultUri: vscode.Uri.file(params.defaultFileName), + filters: { + 'HTML files': ['html'], + 'All files': ['*'] + } + }); + + if (saveUri) { + // Write the report content to the selected file + await vscode.workspace.fs.writeFile(saveUri, Buffer.from(params.reportContent, 'utf8')); + vscode.window.showInformationMessage(`Migration report saved to ${saveUri.fsPath}`); + } + } } diff --git a/workspaces/wi/wi-rpc-client/src/rpc-clients/main/rpc-client.ts b/workspaces/wi/wi-rpc-client/src/rpc-clients/main/rpc-client.ts index a2a3fb03463..8fdb0aeb991 100644 --- a/workspaces/wi/wi-rpc-client/src/rpc-clients/main/rpc-client.ts +++ b/workspaces/wi/wi-rpc-client/src/rpc-clients/main/rpc-client.ts @@ -43,6 +43,8 @@ import { pullMigrationTool, importIntegration, showErrorMessage, + openMigrationReport, + saveMigrationReport, GetConfigurationRequest, GetConfigurationResponse, GetSubFoldersRequest, @@ -59,7 +61,9 @@ import { PullMigrationToolRequest, ImportIntegrationRPCRequest, ImportIntegrationResponse, - ShowErrorMessageRequest + ShowErrorMessageRequest, + OpenMigrationReportRequest, + SaveMigrationReportRequest } from "@wso2/wi-core"; import { HOST_EXTENSION } from "vscode-messenger-common"; import { Messenger } from "vscode-messenger-webview"; @@ -147,6 +151,14 @@ export class MainRpcClient implements WIVisualizerAPI { return this._messenger.sendRequest(showErrorMessage, HOST_EXTENSION, params); } + openMigrationReport(params: OpenMigrationReportRequest): Promise { + return this._messenger.sendRequest(openMigrationReport, HOST_EXTENSION, params); + } + + saveMigrationReport(params: SaveMigrationReportRequest): Promise { + return this._messenger.sendRequest(saveMigrationReport, HOST_EXTENSION, params); + } + getMessenger(): Messenger { return this._messenger; } diff --git a/workspaces/wi/wi-webviews/src/views/ImportIntegration/MigrationProgressView.tsx b/workspaces/wi/wi-webviews/src/views/ImportIntegration/MigrationProgressView.tsx index 46fffc411d6..ec1dd704b61 100644 --- a/workspaces/wi/wi-webviews/src/views/ImportIntegration/MigrationProgressView.tsx +++ b/workspaces/wi/wi-webviews/src/views/ImportIntegration/MigrationProgressView.tsx @@ -23,6 +23,7 @@ import { MigrationStatusContent } from "./components/MigrationStatusContent"; import { BodyText, ButtonWrapper, NextButtonWrapper, StepWrapper } from "./styles"; import { MigrationProgressProps, MigrationReportJSON } from "./types"; import { getMigrationDisplayState, getMigrationProgressHeaderData } from "./utils"; +import { useVisualizerContext } from "../../contexts"; export function MigrationProgressView({ migrationState, @@ -34,6 +35,7 @@ export function MigrationProgressView({ onBack, }: MigrationProgressProps) { const [isLogsOpen, setIsLogsOpen] = useState(false); + const { rpcClient } = useVisualizerContext(); // Parse migration report JSON when available const parsedReportData = useMemo(() => { @@ -61,10 +63,10 @@ export function MigrationProgressView({ try { if (migrationResponse?.report) { console.log("Report found, opening via RPC..."); - // rpcClient.getMigrateIntegrationRpcClient().openMigrationReport({ - // reportContent: migrationResponse.report, - // fileName: "migration-report.html", - // }); + rpcClient.getMainRpcClient().openMigrationReport({ + reportContent: migrationResponse.report, + fileName: "migration-report.html", + }); } } catch (error) { console.error("Failed to open migration report:", error); @@ -81,10 +83,10 @@ export function MigrationProgressView({ // VSCode extension environment - use RPC to show save dialog console.log("Saving report via VSCode save dialog..."); - // rpcClient.getMigrateIntegrationRpcClient().saveMigrationReport({ - // reportContent: migrationResponse.report, - // defaultFileName: "migration-report.html", - // }); + rpcClient.getMainRpcClient().saveMigrationReport({ + reportContent: migrationResponse.report, + defaultFileName: "migration-report.html", + }); } catch (error) { console.error("Failed to save migration report:", error); } From c963d82f7a38ac062568b17bf590a0f21c9282cf Mon Sep 17 00:00:00 2001 From: gigara Date: Wed, 19 Nov 2025 14:42:34 +0530 Subject: [PATCH 47/55] Remove BI extension's duplicate code from WI --- .../wi-extension/src/bi/biExtentionContext.ts | 30 -- .../wi/wi-extension/src/bi/constants/index.ts | 19 - .../src/bi/project-explorer/activate.ts | 102 ----- .../project-explorer-provider.ts | 370 ------------------ .../src/rpc-managers/main/rpc-manager.ts | 23 +- .../wi/wi-extension/src/stateMachine.ts | 26 +- 6 files changed, 10 insertions(+), 560 deletions(-) delete mode 100644 workspaces/wi/wi-extension/src/bi/biExtentionContext.ts delete mode 100644 workspaces/wi/wi-extension/src/bi/constants/index.ts delete mode 100644 workspaces/wi/wi-extension/src/bi/project-explorer/activate.ts delete mode 100644 workspaces/wi/wi-extension/src/bi/project-explorer/project-explorer-provider.ts diff --git a/workspaces/wi/wi-extension/src/bi/biExtentionContext.ts b/workspaces/wi/wi-extension/src/bi/biExtentionContext.ts deleted file mode 100644 index dfa13fe3303..00000000000 --- a/workspaces/wi/wi-extension/src/bi/biExtentionContext.ts +++ /dev/null @@ -1,30 +0,0 @@ - -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ExtendedLangClientInterface } from "@wso2/ballerina-core"; -import { ExtensionContext } from "vscode"; - -export class ExtensionVariables { - public context!: ExtensionContext; - public langClient!: ExtendedLangClientInterface; - public biSupported?: boolean; - public isNPSupported?: boolean; -} - -export const extension = new ExtensionVariables(); diff --git a/workspaces/wi/wi-extension/src/bi/constants/index.ts b/workspaces/wi/wi-extension/src/bi/constants/index.ts deleted file mode 100644 index 182bfeda524..00000000000 --- a/workspaces/wi/wi-extension/src/bi/constants/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -// ADD ALL THE NON-SHARED BI ONLY ATTRIBUTES HERE. diff --git a/workspaces/wi/wi-extension/src/bi/project-explorer/activate.ts b/workspaces/wi/wi-extension/src/bi/project-explorer/activate.ts deleted file mode 100644 index f7accf32f8c..00000000000 --- a/workspaces/wi/wi-extension/src/bi/project-explorer/activate.ts +++ /dev/null @@ -1,102 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import { SHARED_COMMANDS, BI_COMMANDS } from '@wso2/ballerina-core'; -import { ProjectExplorerEntry, ProjectExplorerEntryProvider } from './project-explorer-provider'; -import { ExtensionContext, TreeView, commands, window, workspace } from 'vscode'; -import { extension } from '../biExtentionContext'; -import { VIEWS } from '@wso2/wi-core'; - -interface ExplorerActivationConfig { - context: ExtensionContext; - isBI: boolean; - isBallerina?: boolean; - isMultiRoot?: boolean; -} - -export function activateBIProjectExplorer(config: ExplorerActivationConfig) { - const { context, isBI, isBallerina, isMultiRoot } = config; - - if (extension.langClient && extension.biSupported) { - setLoadingStatus(); - } - - const projectExplorerDataProvider = new ProjectExplorerEntryProvider(); - const projectTree = createProjectTree(projectExplorerDataProvider); - - if (isBallerina) { - registerBallerinaCommands(projectExplorerDataProvider, isBI, isMultiRoot); - } - - handleVisibilityChangeEvents(projectTree, projectExplorerDataProvider, isBallerina); - context.subscriptions.push(workspace.onDidDeleteFiles(() => projectExplorerDataProvider.refresh())); -} - -function setLoadingStatus() { - commands.executeCommand('setContext', 'BI.status', 'loading'); -} - -function createProjectTree(dataProvider: ProjectExplorerEntryProvider) { - return window.createTreeView(VIEWS.INTEGRATOR_EXPLORER, { treeDataProvider: dataProvider }); -} - -function registerBallerinaCommands(dataProvider: ProjectExplorerEntryProvider, isBI: boolean, isMultiRoot?: boolean) { - commands.registerCommand(BI_COMMANDS.REFRESH_COMMAND, () => dataProvider.refresh()); - - if (isMultiRoot) { - commands.executeCommand('setContext', 'BI.isMultiRoot', true); - } - if (isBI) { - registerBICommands(); - } -} - -function handleVisibilityChangeEvents(tree: TreeView, dataProvider: ProjectExplorerEntryProvider, isBallerina?: boolean) { - tree.onDidChangeVisibility(async res => await handleVisibilityChange(res, dataProvider, isBallerina)); -} - -async function handleVisibilityChange(res: { visible: boolean }, dataProvider: ProjectExplorerEntryProvider, isBallerina?: boolean) { - if (res.visible) { - if (isBallerina && extension.biSupported) { - commands.executeCommand(SHARED_COMMANDS.SHOW_VISUALIZER); - await commands.executeCommand(SHARED_COMMANDS.FORCE_UPDATE_PROJECT_ARTIFACTS); - dataProvider.refresh(); - } else { - handleNonBallerinaVisibility(); - } - } -} - -function handleNonBallerinaVisibility() { - if (extension.langClient) { - if (!extension.biSupported) { - commands.executeCommand('setContext', 'BI.status', 'updateNeed'); - } else { - commands.executeCommand('setContext', 'BI.status', 'unknownProject'); - } - } else { - commands.executeCommand('setContext', 'BI.status', 'noLS'); - } - commands.executeCommand(SHARED_COMMANDS.OPEN_BI_WELCOME); -} - -function registerBICommands() { - commands.executeCommand(BI_COMMANDS.FOCUS_PROJECT_EXPLORER); - commands.executeCommand(SHARED_COMMANDS.SHOW_VISUALIZER); - commands.executeCommand('setContext', 'BI.project', true); -} - diff --git a/workspaces/wi/wi-extension/src/bi/project-explorer/project-explorer-provider.ts b/workspaces/wi/wi-extension/src/bi/project-explorer/project-explorer-provider.ts deleted file mode 100644 index 0d8d71ef156..00000000000 --- a/workspaces/wi/wi-extension/src/bi/project-explorer/project-explorer-provider.ts +++ /dev/null @@ -1,370 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import * as vscode from 'vscode'; -import { window, Uri, commands } from 'vscode'; -import path = require('path'); -import { DIRECTORY_MAP, ProjectStructureArtifactResponse, ProjectStructureResponse, SHARED_COMMANDS, BI_COMMANDS, PackageConfigSchema, BallerinaProject, VisualizerLocation } from "@wso2/ballerina-core"; -import { extension } from "../biExtentionContext"; - -export class ProjectExplorerEntry extends vscode.TreeItem { - children: ProjectExplorerEntry[] | undefined; - info: string | undefined; - - constructor( - public readonly label: string, - public collapsibleState: vscode.TreeItemCollapsibleState, - info: string | undefined = undefined, - icon: string = 'folder', - isCodicon: boolean = false - ) { - super(label, collapsibleState); - this.tooltip = `${this.label}`; - this.info = info; - if (icon && isCodicon) { - this.iconPath = new vscode.ThemeIcon(icon); - } else if (icon) { - this.iconPath = { - light: vscode.Uri.file(path.join(extension.context.extensionPath, 'assets', `light-${icon}.svg`)), - dark: vscode.Uri.file(path.join(extension.context.extensionPath, 'assets', `dark-${icon}.svg`)) - }; - } - } -} - -export class ProjectExplorerEntryProvider implements vscode.TreeDataProvider { - private _data: ProjectExplorerEntry[]; - private _onDidChangeTreeData: vscode.EventEmitter - = new vscode.EventEmitter(); - readonly onDidChangeTreeData: vscode.Event - = this._onDidChangeTreeData.event; - - refresh(): void { - window.withProgress({ - location: { viewId: BI_COMMANDS.PROJECT_EXPLORER }, - title: 'Loading project structure' - }, async () => { - try { - const data = await getProjectStructureData(); - this._data = data; - // Fire the event after data is fully populated - this._onDidChangeTreeData.fire(); - } catch (err) { - console.error(err); - this._data = []; - this._onDidChangeTreeData.fire(); - } - }); - } - - constructor() { - this._data = []; - } - - getTreeItem(element: ProjectExplorerEntry): vscode.TreeItem | Thenable { - return element; - } - - getChildren(element?: ProjectExplorerEntry | undefined): vscode.ProviderResult { - if (element === undefined) { - return this._data; - } - return element.children; - } - - getParent(element: ProjectExplorerEntry): vscode.ProviderResult { - if (element.info === undefined) return undefined; - - const projects = (this._data); - for (const project of projects) { - if (project.children?.find(child => child.info === element.info)) { - return project; - } - const fileElement = this.recursiveSearchParent(project, element.info); - if (fileElement) { - return fileElement; - } - } - return element; - } - - recursiveSearchParent(element: ProjectExplorerEntry, path: string): ProjectExplorerEntry | undefined { - if (!element.children) { - return undefined; - } - for (const child of element.children) { - if (child.info === path) { - return element; - } - const foundParent = this.recursiveSearchParent(child, path); - if (foundParent) { - return foundParent; - } - } - return undefined; - } -} - -async function getProjectStructureData(): Promise { - if (vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) { - const data: ProjectExplorerEntry[] = []; - if (extension.langClient) { - const stateContext: VisualizerLocation = await commands.executeCommand(SHARED_COMMANDS.GET_STATE_CONTEXT); - if (!stateContext) { - return []; - } - - const ballerinaWorkspace = stateContext.workspacePath; - const workspaceFolderOfPackage = vscode - .workspace - .workspaceFolders - .find(folder => folder.uri.fsPath === stateContext.projectPath); - - let packageName: string; - let packagePath: string; - - if (!workspaceFolderOfPackage) { - if (ballerinaWorkspace) { - packageName = path.basename(Uri.parse(stateContext.projectPath).path); - packagePath = stateContext.projectPath; - } else { - return []; - } - } else { - packageName = workspaceFolderOfPackage.name; - packagePath = workspaceFolderOfPackage.uri.fsPath; - } - - // Get the state context from ballerina extension as it maintain the event driven tree data - let projectStructure; - if (typeof stateContext === 'object' && stateContext !== null && 'projectStructure' in stateContext && stateContext.projectStructure !== null) { - projectStructure = stateContext.projectStructure; - const projectTree = generateTreeData(packageName, packagePath, projectStructure); - if (projectTree) { - data.push(projectTree); - } - } - - return data; - } - } - return []; -} - -function generateTreeData( - packageName: string, - packagePath: string, - components: ProjectStructureResponse -): ProjectExplorerEntry | undefined { - const projectRootEntry = new ProjectExplorerEntry( - `${packageName}`, - vscode.TreeItemCollapsibleState.Expanded, - packagePath, - 'project', - true - ); - projectRootEntry.contextValue = 'bi-project'; - const children = getEntriesBI(components); - projectRootEntry.children = children; - - return projectRootEntry; -} - -function getEntriesBI(components: ProjectStructureResponse): ProjectExplorerEntry[] { - const entries: ProjectExplorerEntry[] = []; - - // ---------- Entry Points ---------- - const entryPoints = new ProjectExplorerEntry( - "Entry Points", - vscode.TreeItemCollapsibleState.Expanded, - null, - 'start', - false - ); - entryPoints.contextValue = "entryPoint"; - entryPoints.children = []; - if (components.directoryMap[DIRECTORY_MAP.AUTOMATION].length > 0) { - entryPoints.children.push(...getComponents(components.directoryMap[DIRECTORY_MAP.AUTOMATION], DIRECTORY_MAP.AUTOMATION)); - } - entryPoints.children.push(...getComponents(components.directoryMap[DIRECTORY_MAP.SERVICE], DIRECTORY_MAP.SERVICE)); - if (entryPoints.children.length > 0) { - entryPoints.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; - } - entries.push(entryPoints); - - // ---------- Listeners ---------- - const listeners = new ProjectExplorerEntry( - "Listeners", - vscode.TreeItemCollapsibleState.Expanded, - null, - 'radio', - false - ); - listeners.contextValue = "listeners"; - listeners.children = getComponents(components.directoryMap[DIRECTORY_MAP.LISTENER], DIRECTORY_MAP.LISTENER); - if (listeners.children.length > 0) { - listeners.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; - } - entries.push(listeners); - - // ---------- Connections ---------- - const connections = new ProjectExplorerEntry( - "Connections", - vscode.TreeItemCollapsibleState.Expanded, - null, - 'connection', - false - ); - connections.contextValue = "connections"; - connections.children = getComponents(components.directoryMap[DIRECTORY_MAP.CONNECTION], DIRECTORY_MAP.CONNECTION); - if (connections.children.length > 0) { - connections.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; - } - entries.push(connections); - - // ---------- Types ---------- - const types = new ProjectExplorerEntry( - "Types", - vscode.TreeItemCollapsibleState.Expanded, - null, - 'type', - false - ); - types.contextValue = "types"; - types.children = getComponents([ - ...components.directoryMap[DIRECTORY_MAP.TYPE] - ], DIRECTORY_MAP.TYPE); - if (types.children.length > 0) { - types.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; - } - entries.push(types); - - // ---------- Functions ---------- - const functions = new ProjectExplorerEntry( - "Functions", - vscode.TreeItemCollapsibleState.Expanded, - null, - 'function', - false - ); - functions.contextValue = "functions"; - functions.children = getComponents(components.directoryMap[DIRECTORY_MAP.FUNCTION], DIRECTORY_MAP.FUNCTION); - if (functions.children.length > 0) { - functions.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; - } - entries.push(functions); - - // ---------- Data Mappers ---------- - const dataMappers = new ProjectExplorerEntry( - "Data Mappers", - vscode.TreeItemCollapsibleState.Expanded, - null, - 'dataMapper', - false - ); - dataMappers.contextValue = "dataMappers"; - dataMappers.children = getComponents(components.directoryMap[DIRECTORY_MAP.DATA_MAPPER], DIRECTORY_MAP.DATA_MAPPER); - if (dataMappers.children.length > 0) { - dataMappers.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; - } - entries.push(dataMappers); - - // ---------- Configurations ---------- - const configs = new ProjectExplorerEntry( - "Configurations", - vscode.TreeItemCollapsibleState.None, - null, - 'config', - false - ); - configs.contextValue = "configurations"; - entries.push(configs); - - // ---------- Natural Functions ---------- - if (extension.isNPSupported) { - const naturalFunctions = new ProjectExplorerEntry( - "Natural Functions", - vscode.TreeItemCollapsibleState.Expanded, - null, - 'function', - false - ); - naturalFunctions.contextValue = "naturalFunctions"; - naturalFunctions.children = getComponents(components.directoryMap[DIRECTORY_MAP.NP_FUNCTION], DIRECTORY_MAP.NP_FUNCTION); - if (naturalFunctions.children.length > 0) { - naturalFunctions.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; - } - entries.push(naturalFunctions); - } - - // ---------- Local Connectors ---------- - const localConnectors = new ProjectExplorerEntry( - "Custom Connectors", - vscode.TreeItemCollapsibleState.Expanded, - null, - 'connection', - false - ); - localConnectors.contextValue = "localConnectors"; - localConnectors.children = getComponents(components.directoryMap[DIRECTORY_MAP.LOCAL_CONNECTORS], DIRECTORY_MAP.CONNECTOR); - if (localConnectors.children.length > 0) { - localConnectors.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; - } - // REMOVE THE CUSTOM CONNECTOR TREE ITEM FOR NOW - // entries.push(localConnectors); - - return entries; -} - -function getComponents(items: ProjectStructureArtifactResponse[], itemType: DIRECTORY_MAP): ProjectExplorerEntry[] { - if (!items) { - return []; - } - const entries: ProjectExplorerEntry[] = []; - const resetHistory = true; - for (const comp of items) { - if (comp.type !== itemType) { - continue; - } - const fileEntry = new ProjectExplorerEntry( - comp.name, - vscode.TreeItemCollapsibleState.None, - comp.path, - comp.icon - ); - fileEntry.command = { - "title": "Visualize", - "command": SHARED_COMMANDS.SHOW_VISUALIZER, - "arguments": [comp.path, comp.position, resetHistory] - }; - fileEntry.contextValue = itemType; - fileEntry.tooltip = comp.context; - // Get the children for services only - if (itemType === DIRECTORY_MAP.SERVICE) { - const resourceFunctions = getComponents(comp.resources, DIRECTORY_MAP.RESOURCE); - const remoteFunctions = getComponents(comp.resources, DIRECTORY_MAP.REMOTE); - fileEntry.children = [...resourceFunctions, ...remoteFunctions]; - if (fileEntry.children.length > 0) { - fileEntry.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; - } - } - entries.push(fileEntry); - } - return entries; -} - diff --git a/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts b/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts index f7b9ad25373..dba01257c7f 100644 --- a/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts +++ b/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts @@ -49,7 +49,6 @@ import { askFileOrFolderPath, askFilePath, askProjectPath, BALLERINA_INTEGRATOR_ import * as fs from "fs"; import * as path from "path"; import axios from "axios"; -import { extension } from "../../bi/biExtentionContext"; import { pullMigrationTool } from "./migrate-integration"; export class MainRpcManager implements WIVisualizerAPI { @@ -177,7 +176,7 @@ export class MainRpcManager implements WIVisualizerAPI { }; const result = await commands.executeCommand("MI.project-explorer.create-project", miCommandParams); - + if (result) { resolve(result as CreateMiProjectResponse); } else { @@ -245,19 +244,15 @@ export class MainRpcManager implements WIVisualizerAPI { } private getLangClient() { - if (!extension.langClient) { - const ballerinaExt = extensions.getExtension('wso2.ballerina'); - if (!ballerinaExt) { - throw new Error('Ballerina extension is not installed'); - } - if (!ballerinaExt.isActive) { - throw new Error('Ballerina extension is not activated yet'); - } - extension.langClient = ballerinaExt.exports.ballerinaExtInstance.langClient; - extension.biSupported = ballerinaExt.exports.ballerinaExtInstance.biSupported; - extension.isNPSupported = ballerinaExt.exports.ballerinaExtInstance.isNPSupported; + const ballerinaExt = extensions.getExtension('wso2.ballerina'); + if (!ballerinaExt) { + throw new Error('Ballerina extension is not installed'); + } + if (!ballerinaExt.isActive) { + throw new Error('Ballerina extension is not activated yet'); } - return extension.langClient as any; + const langClient = ballerinaExt.exports.ballerinaExtInstance.langClient; + return langClient as any; } async getMigrationTools(): Promise { diff --git a/workspaces/wi/wi-extension/src/stateMachine.ts b/workspaces/wi/wi-extension/src/stateMachine.ts index b1fd0f4e7f8..ed26c3f5b16 100644 --- a/workspaces/wi/wi-extension/src/stateMachine.ts +++ b/workspaces/wi/wi-extension/src/stateMachine.ts @@ -19,11 +19,9 @@ import { assign, createMachine, interpret } from 'xstate'; import * as vscode from 'vscode'; import { CONTEXT_KEYS } from '@wso2/wi-core'; -import { activateBIProjectExplorer } from './bi/project-explorer/activate'; import { ext } from './extensionVariables'; import { fetchProjectInfo, ProjectInfo } from './bi/utils'; import { checkIfMiProject } from './mi/utils'; -import { extension } from './bi/biExtentionContext'; import { WebviewManager } from './webviewManager'; import { ExtensionAPIs } from './extensionAPIs'; import { registerCommands } from './commands'; @@ -138,16 +136,8 @@ const stateMachine = createMachine({ ext.log(`Activating for project type: ${context.projectType}`); if (context.projectType === ProjectType.BI_BALLERINA) { - // Activate BI tree view - activateBIProjectExplorer({ - context: ext.context, - isBI: context.isBI, - isBallerina: context.isBallerina, - isMultiRoot: context.isMultiRoot - }); vscode.commands.executeCommand('setContext', 'WI.projectType', 'bi'); } else if (context.projectType === ProjectType.MI) { - // Activate MI tree view ext.log('MI project detected - MI tree view would be activated here'); vscode.commands.executeCommand('setContext', 'WI.projectType', 'mi'); } else { @@ -193,10 +183,6 @@ async function activateExtensionsBasedOnProjectType(context: MachineContext): Pr async function detectProjectType(): Promise<{ projectType: ProjectType; - isBI?: boolean; - isBallerina?: boolean; - isMultiRoot?: boolean; - isMI?: boolean; }> { const workspaceRoot = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath; @@ -206,8 +192,7 @@ async function detectProjectType(): Promise<{ if (isMiProject) { ext.log('Detected MI project'); return { - projectType: ProjectType.MI, - isMI: true + projectType: ProjectType.MI }; } @@ -218,17 +203,8 @@ async function detectProjectType(): Promise<{ if (projectInfo.isBallerina && ballerinaExt) { ext.log('Detected BI/Ballerina project'); - // Initialize Ballerina extension context - extension.context = ext.context; - extension.langClient = ballerinaExt.exports.ballerinaExtInstance.langClient; - extension.biSupported = ballerinaExt.exports.ballerinaExtInstance.biSupported; - extension.isNPSupported = ballerinaExt.exports.ballerinaExtInstance.isNPSupported; - return { projectType: ProjectType.BI_BALLERINA, - isBI: projectInfo.isBI, - isBallerina: projectInfo.isBallerina, - isMultiRoot: projectInfo.isMultiRoot }; } From 637c9f66f435b0ddcdfc95d6ea0a80646b44c21b Mon Sep 17 00:00:00 2001 From: gigara Date: Wed, 19 Nov 2025 14:46:06 +0530 Subject: [PATCH 48/55] Update BI to contribute to the WI activity --- .../src/interfaces/constants.ts | 1 - .../bi/bi-extension/src/constants/index.ts | 5 ++++ .../src/project-explorer/activate.ts | 23 +++++++++++-------- .../bi/bi-extension/src/stateMachine.ts | 9 ++++++-- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/workspaces/ballerina/ballerina-core/src/interfaces/constants.ts b/workspaces/ballerina/ballerina-core/src/interfaces/constants.ts index 3d32b97e5f5..2b16ef81ee5 100644 --- a/workspaces/ballerina/ballerina-core/src/interfaces/constants.ts +++ b/workspaces/ballerina/ballerina-core/src/interfaces/constants.ts @@ -32,7 +32,6 @@ export const BI_COMMANDS = { BI_RUN_PROJECT: 'BI.project.run', BI_DEBUG_PROJECT: 'BI.project.debug', REFRESH_COMMAND: 'BI.project-explorer.refresh', - FOCUS_PROJECT_EXPLORER: 'BI.project-explorer.focus', PROJECT_EXPLORER: 'BI.project-explorer', ADD_CONNECTIONS: 'BI.project-explorer.add-connection', ADD_CUSTOM_CONNECTOR: 'BI.project-explorer.add-custom-connector', diff --git a/workspaces/bi/bi-extension/src/constants/index.ts b/workspaces/bi/bi-extension/src/constants/index.ts index 182bfeda524..469aa924ce5 100644 --- a/workspaces/bi/bi-extension/src/constants/index.ts +++ b/workspaces/bi/bi-extension/src/constants/index.ts @@ -16,4 +16,9 @@ * under the License. */ +import { BI_COMMANDS } from "@wso2/ballerina-core"; + // ADD ALL THE NON-SHARED BI ONLY ATTRIBUTES HERE. +export const WI_EXTENSION_ID = 'wso2.wso2-integrator'; +export const WI_PROJECT_EXPLORER_VIEW_ID = 'wso2-integrator.explorer'; +export const BI_PROJECT_EXPLORER_VIEW_ID = BI_COMMANDS.PROJECT_EXPLORER; diff --git a/workspaces/bi/bi-extension/src/project-explorer/activate.ts b/workspaces/bi/bi-extension/src/project-explorer/activate.ts index 5b5aec60337..f7d5df6bc61 100644 --- a/workspaces/bi/bi-extension/src/project-explorer/activate.ts +++ b/workspaces/bi/bi-extension/src/project-explorer/activate.ts @@ -20,26 +20,28 @@ import { SHARED_COMMANDS, BI_COMMANDS } from '@wso2/ballerina-core'; import { ProjectExplorerEntry, ProjectExplorerEntryProvider } from './project-explorer-provider'; import { ExtensionContext, TreeView, commands, window, workspace } from 'vscode'; import { extension } from '../biExtentionContext'; +import { BI_PROJECT_EXPLORER_VIEW_ID, WI_PROJECT_EXPLORER_VIEW_ID } from '../constants'; interface ExplorerActivationConfig { context: ExtensionContext; isBI: boolean; isBallerina?: boolean; isBalWorkspace?: boolean; + isInWI: boolean; } export function activateProjectExplorer(config: ExplorerActivationConfig) { - const { context, isBI, isBallerina, isBalWorkspace } = config; - + const { context, isBI, isBallerina, isBalWorkspace, isInWI } = config; if (extension.langClient && extension.biSupported) { setLoadingStatus(); } + const treeviewId = isInWI ? WI_PROJECT_EXPLORER_VIEW_ID : BI_PROJECT_EXPLORER_VIEW_ID; const projectExplorerDataProvider = new ProjectExplorerEntryProvider(); - const projectTree = createProjectTree(projectExplorerDataProvider); + const projectTree = createProjectTree(projectExplorerDataProvider, treeviewId); if (isBallerina) { - registerBallerinaCommands(projectExplorerDataProvider, isBI, isBalWorkspace); + registerBallerinaCommands(projectExplorerDataProvider, isBI, isInWI, isBalWorkspace); } handleVisibilityChangeEvents(projectTree, projectExplorerDataProvider, isBallerina); @@ -50,11 +52,11 @@ function setLoadingStatus() { commands.executeCommand('setContext', 'BI.status', 'loading'); } -function createProjectTree(dataProvider: ProjectExplorerEntryProvider) { - return window.createTreeView(BI_COMMANDS.PROJECT_EXPLORER, { treeDataProvider: dataProvider }); +function createProjectTree(dataProvider: ProjectExplorerEntryProvider, treeviewId: string) { + return window.createTreeView(treeviewId, { treeDataProvider: dataProvider }); } -function registerBallerinaCommands(dataProvider: ProjectExplorerEntryProvider, isBI: boolean, isBalWorkspace?: boolean) { +function registerBallerinaCommands(dataProvider: ProjectExplorerEntryProvider, isBI: boolean, isInWI: boolean, isBalWorkspace?: boolean) { commands.registerCommand(BI_COMMANDS.REFRESH_COMMAND, () => dataProvider.refresh()); commands.executeCommand('setContext', 'BI.isWorkspaceSupported', extension.isWorkspaceSupported ?? false); @@ -62,7 +64,7 @@ function registerBallerinaCommands(dataProvider: ProjectExplorerEntryProvider, i commands.executeCommand('setContext', 'BI.isBalWorkspace', true); } if (isBI) { - registerBICommands(); + registerBICommands(isInWI); } } @@ -95,8 +97,9 @@ function handleNonBallerinaVisibility() { commands.executeCommand(SHARED_COMMANDS.OPEN_BI_WELCOME); } -function registerBICommands() { - commands.executeCommand(BI_COMMANDS.FOCUS_PROJECT_EXPLORER); +function registerBICommands(isInWI) { + const treeViewId = isInWI ? WI_PROJECT_EXPLORER_VIEW_ID : BI_PROJECT_EXPLORER_VIEW_ID; + commands.executeCommand(`${treeViewId}.focus`); commands.executeCommand(SHARED_COMMANDS.SHOW_VISUALIZER); commands.executeCommand('setContext', 'BI.project', true); } diff --git a/workspaces/bi/bi-extension/src/stateMachine.ts b/workspaces/bi/bi-extension/src/stateMachine.ts index 2e6439a2867..bd5840db333 100644 --- a/workspaces/bi/bi-extension/src/stateMachine.ts +++ b/workspaces/bi/bi-extension/src/stateMachine.ts @@ -20,11 +20,14 @@ import { assign, createMachine, interpret } from 'xstate'; import { activateProjectExplorer } from './project-explorer/activate'; import { extension } from './biExtentionContext'; import { fetchProjectInfo, ProjectInfo } from './utils'; +import { WI_EXTENSION_ID } from './constants'; +import * as vscode from 'vscode'; interface MachineContext { isBI: boolean; isBallerina?: boolean; isBalWorkspace?: boolean; + isInWI: boolean; } const stateMachine = createMachine({ @@ -33,7 +36,8 @@ const stateMachine = createMachine({ initial: 'initialize', predictableActionArguments: true, context: { - isBI: false + isBI: false, + isInWI: vscode.extensions.getExtension(WI_EXTENSION_ID) ? true : false }, states: { initialize: { @@ -68,7 +72,8 @@ const stateMachine = createMachine({ context: extension.context, isBI: context.isBI, isBallerina: context.isBallerina, - isBalWorkspace: context.isBalWorkspace + isBalWorkspace: context.isBalWorkspace, + isInWI: context.isInWI }); } }, From d4632a4f1a2768f68ebeabf8b8252ff2fcdf2052 Mon Sep 17 00:00:00 2001 From: gigara Date: Wed, 19 Nov 2025 14:46:53 +0530 Subject: [PATCH 49/55] Refactor project explorer commands and add new view IDs for better context handling --- workspaces/mi/mi-extension/src/constants/index.ts | 5 +++-- workspaces/mi/mi-extension/src/stateMachine.ts | 12 +++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/workspaces/mi/mi-extension/src/constants/index.ts b/workspaces/mi/mi-extension/src/constants/index.ts index b118809f788..0372730b149 100644 --- a/workspaces/mi/mi-extension/src/constants/index.ts +++ b/workspaces/mi/mi-extension/src/constants/index.ts @@ -74,7 +74,6 @@ export const COMMANDS = { CREATE_PROJECT_COMMAND: 'MI.project-explorer.create-project', IMPORT_PROJECT_COMMAND: 'MI.project-explorer.import-project', REVEAL_ITEM_COMMAND: 'MI.project-explorer.revealItem', - FOCUS_PROJECT_EXPLORER: 'MI.project-explorer.focus', OPEN_SERVICE_DESIGNER: 'MI.project-explorer.open-service-designer', OPEN_PROJECT_OVERVIEW: 'MI.project-explorer.open-project-overview', ADD_REGISTERY_RESOURCE_COMMAND: 'MI.project-explorer.add-registry-resource', @@ -205,4 +204,6 @@ export const ERROR_MESSAGES = { ERROR_DOWNLOADING_MODULES: "Unable to download the default modules. These modules can be added after project creation. Do you wish to skip them now and proceed with the project creation?", }; -export const WI_EXTENSION_ID = 'wso2.wso2-integrator'; \ No newline at end of file +export const WI_EXTENSION_ID = 'wso2.wso2-integrator'; +export const WI_PROJECT_EXPLORER_VIEW_ID = 'wso2-integrator.explorer'; +export const MI_PROJECT_EXPLORER_VIEW_ID = 'MI.project-explorer'; diff --git a/workspaces/mi/mi-extension/src/stateMachine.ts b/workspaces/mi/mi-extension/src/stateMachine.ts index 6714bbc57c1..82f2a60f763 100644 --- a/workspaces/mi/mi-extension/src/stateMachine.ts +++ b/workspaces/mi/mi-extension/src/stateMachine.ts @@ -18,7 +18,7 @@ import { ExtendedLanguageClient } from './lang-client/ExtendedLanguageClient'; import { VisualizerWebview, webviews } from './visualizer/webview'; import { RPCLayer } from './RPCLayer'; import { history } from './history/activator'; -import { COMMANDS, WI_EXTENSION_ID } from './constants'; +import { COMMANDS, MI_PROJECT_EXPLORER_VIEW_ID, WI_EXTENSION_ID, WI_PROJECT_EXPLORER_VIEW_ID } from './constants'; import { activateProjectExplorer } from './project-explorer/activate'; import { MockService, STNode, UnitTest, Task, InboundEndpoint } from '../../syntax-tree/lib/src'; import { logDebug } from './util/logger'; @@ -391,7 +391,8 @@ const stateMachine = createMachine({ return new Promise(async (resolve, reject) => { console.log("Waiting for LS to be ready " + new Date().toLocaleTimeString()); try { - vscode.commands.executeCommand(COMMANDS.FOCUS_PROJECT_EXPLORER); + const treeViewId = context.isInWI ? WI_PROJECT_EXPLORER_VIEW_ID : MI_PROJECT_EXPLORER_VIEW_ID; + vscode.commands.executeCommand(`${treeViewId}.focus`); const instance = await MILanguageClient.getInstance(context.projectUri!); const errors = instance.getErrors(); if (errors.length) { @@ -654,7 +655,7 @@ const stateMachine = createMachine({ activateOtherFeatures: (context, event) => { return new Promise(async (resolve, reject) => { const ls = await MILanguageClient.getInstance(context.projectUri!); - const treeviewId = context.isInWI ? 'wso2-integrator.explorer' : 'MI.project-explorer'; + const treeviewId = context.isInWI ? WI_PROJECT_EXPLORER_VIEW_ID : MI_PROJECT_EXPLORER_VIEW_ID; await activateProjectExplorer(treeviewId, extension.context, ls.languageClient!); await activateTestExplorer(extension.context); resolve(true); @@ -669,7 +670,8 @@ const stateMachine = createMachine({ }, focusProjectExplorer: (context, event) => { return new Promise(async (resolve, reject) => { - vscode.commands.executeCommand(COMMANDS.FOCUS_PROJECT_EXPLORER); + const treeViewId = context.isInWI ? WI_PROJECT_EXPLORER_VIEW_ID : MI_PROJECT_EXPLORER_VIEW_ID; + vscode.commands.executeCommand(`${treeViewId}.focus`); resolve(true); }); } @@ -698,7 +700,7 @@ export const getStateMachine = (projectUri: string, context?: VisualizerLocation langClient: null, errors: [], view: MACHINE_VIEW.Overview, - isInWI: vscode.extensions.getExtension(WI_EXTENSION_ID)?.isActive ?? false, + isInWI: vscode.extensions.getExtension(WI_EXTENSION_ID) ? true : false, ...context })).start(); stateMachines.set(projectUri, stateService); From cd4e45d8ce33404dd2bede7813b1318bfcd28d52 Mon Sep 17 00:00:00 2001 From: gigara Date: Wed, 19 Nov 2025 14:47:08 +0530 Subject: [PATCH 50/55] Hide BI activity in WI mode --- workspaces/bi/bi-extension/package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/workspaces/bi/bi-extension/package.json b/workspaces/bi/bi-extension/package.json index 82a7d1494e7..84583f37c0e 100644 --- a/workspaces/bi/bi-extension/package.json +++ b/workspaces/bi/bi-extension/package.json @@ -62,7 +62,8 @@ "ballerina-integrator": [ { "id": "BI.project-explorer", - "name": "" + "name": "", + "when": "!config.integrator.defaultIntegrator" } ] }, @@ -200,4 +201,4 @@ "@playwright/test": "~1.55.1", "@wso2/playwright-vscode-tester": "workspace:*" } -} +} \ No newline at end of file From ed39df129c7bbd2217f84cfb0d9354e6c7ee2dbd Mon Sep 17 00:00:00 2001 From: gigara Date: Wed, 19 Nov 2025 23:29:56 +0530 Subject: [PATCH 51/55] Remove WI packages from vscode repo --- rush.json | 16 - workspaces/wi/wi-core/biome.json | 30 - .../wi/wi-core/config/rush-project.json | 3 - workspaces/wi/wi-core/package.json | 29 - workspaces/wi/wi-core/src/constants.ts | 60 - workspaces/wi/wi-core/src/enums.ts | 46 - workspaces/wi/wi-core/src/index.ts | 23 - .../wi/wi-core/src/rpc-types/main/index.ts | 44 - .../wi/wi-core/src/rpc-types/main/rpc-type.ts | 45 - .../rpc-types/migrate-integration/index.ts | 31 - .../migrate-integration/interfaces.ts | 94 - .../rpc-types/migrate-integration/rpc-type.ts | 29 - .../wi/wi-core/src/types/common.types.ts | 63 - workspaces/wi/wi-core/src/types/index.ts | 21 - workspaces/wi/wi-core/src/types/rpc.types.ts | 188 - .../wi-core/src/types/webview-props.types.ts | 28 - workspaces/wi/wi-core/src/utils.ts | 45 - workspaces/wi/wi-core/tsconfig.json | 20 - workspaces/wi/wi-extension/.env.example | 15 - workspaces/wi/wi-extension/.gitignore | 5 - .../wi/wi-extension/.vscode/launch.json | 30 - .../wi/wi-extension/.vscode/settings.json | 5 - workspaces/wi/wi-extension/.vscode/tasks.json | 36 - workspaces/wi/wi-extension/.vscodeignore | 2 - workspaces/wi/wi-extension/CHANGELOG.md | 14 - workspaces/wi/wi-extension/LICENSE | 60 - workspaces/wi/wi-extension/README.md | 82 - .../wi/wi-extension/assets/ballerina.svg | 39 - workspaces/wi/wi-extension/assets/bi-logo.svg | 65 - .../wi-extension/assets/dark-APIResource.svg | 21 - .../wi/wi-extension/assets/dark-Sequence.svg | 24 - .../assets/dark-address-endpoint-template.svg | 7 - .../assets/dark-address-endpoint.svg | 5 - .../wi-extension/assets/dark-arrow-swap.svg | 1 - .../wi-extension/assets/dark-bi-ai-agent.svg | 22 - .../wi/wi-extension/assets/dark-bi-asb.svg | 18 - .../wi/wi-extension/assets/dark-bi-config.svg | 23 - .../assets/dark-bi-connection.svg | 21 - .../wi/wi-extension/assets/dark-bi-file.svg | 18 - .../wi/wi-extension/assets/dark-bi-ftp.svg | 18 - .../wi-extension/assets/dark-bi-function.svg | 21 - .../wi/wi-extension/assets/dark-bi-github.svg | 21 - .../wi/wi-extension/assets/dark-bi-globe.svg | 21 - .../wi-extension/assets/dark-bi-graphql.svg | 20 - .../wi/wi-extension/assets/dark-bi-grpc.svg | 20 - .../assets/dark-bi-http-service.svg | 21 - .../wi/wi-extension/assets/dark-bi-java.svg | 20 - .../wi/wi-extension/assets/dark-bi-kafka.svg | 20 - .../wi/wi-extension/assets/dark-bi-mqtt.svg | 20 - .../wi/wi-extension/assets/dark-bi-nats.svg | 20 - .../wi-extension/assets/dark-bi-rabbitmq.svg | 20 - .../assets/dark-bi-salesforce.svg | 18 - .../wi/wi-extension/assets/dark-bi-task.svg | 21 - .../wi/wi-extension/assets/dark-bi-tcp.svg | 18 - .../wi/wi-extension/assets/dark-bi-type.svg | 22 - .../wi-extension/assets/dark-class-icon.svg | 82 - .../wi/wi-extension/assets/dark-config.svg | 23 - .../wi-extension/assets/dark-connection.svg | 21 - .../assets/dark-custom-message-processor.svg | 12 - .../assets/dark-custom-message-store.svg | 8 - .../assets/dark-cxf-ws-rm-endpoint.svg | 13 - .../wi-extension/assets/dark-data-service.svg | 4 - .../wi-extension/assets/dark-data-source.svg | 7 - .../wi-extension/assets/dark-dataMapper.svg | 28 - .../wi/wi-extension/assets/dark-database.svg | 1 - .../assets/dark-default-endpoint-template.svg | 6 - .../assets/dark-default-endpoint.svg | 4 - .../wi-extension/assets/dark-delete-api.svg | 9 - .../wi/wi-extension/assets/dark-endpoint.svg | 23 - .../assets/dark-failover-endpoint.svg | 8 - .../assets/dark-feed-endpoint.svg | 8 - .../assets/dark-file-endpoint.svg | 7 - .../wi/wi-extension/assets/dark-file.svg | 1 - .../wi/wi-extension/assets/dark-fold-down.svg | 1 - .../wi/wi-extension/assets/dark-function.svg | 21 - .../wi/wi-extension/assets/dark-gear.svg | 1 - .../wi/wi-extension/assets/dark-get-api.svg | 6 - .../wi/wi-extension/assets/dark-globe.svg | 1 - .../wi/wi-extension/assets/dark-head-api.svg | 7 - .../wi-extension/assets/dark-hl7-endpoint.svg | 8 - .../assets/dark-http-endpoint-template.svg | 11 - .../assets/dark-http-endpoint.svg | 8 - .../assets/dark-http-inbound-endpoint.svg | 9 - .../wi-extension/assets/dark-http-service.svg | 21 - .../assets/dark-https-endpoint.svg | 10 - .../wi/wi-extension/assets/dark-icon.svg | 67 - .../assets/dark-in-memory-message-store.svg | 10 - .../assets/dark-inbound-endpoint.svg | 22 - .../assets/dark-jdbc-message-store.svg | 9 - .../wi-extension/assets/dark-jms-endpoint.svg | 51 - .../assets/dark-jms-message-store.svg | 52 - .../assets/dark-kafka-endpoint.svg | 6 - .../wi-extension/assets/dark-list-ordered.svg | 1 - .../assets/dark-load-balance-endpoint.svg | 10 - .../wi-extension/assets/dark-local-entry.svg | 21 - .../assets/dark-message-processor.svg | 22 - .../dark-message-sampling-processor.svg | 12 - .../assets/dark-message-store.svg | 9 - .../assets/dark-mqtt-endpoint.svg | 9 - .../wi-extension/assets/dark-options-api.svg | 10 - .../wi/wi-extension/assets/dark-patch-api.svg | 8 - .../wi/wi-extension/assets/dark-plug.svg | 1 - .../wi/wi-extension/assets/dark-post-api.svg | 7 - .../wi/wi-extension/assets/dark-project.svg | 7 - .../wi/wi-extension/assets/dark-put-api.svg | 6 - .../wi/wi-extension/assets/dark-rabbit-mq.svg | 6 - .../assets/dark-rabbitmq-endpoint.svg | 6 - .../wi/wi-extension/assets/dark-radio.svg | 25 - .../assets/dark-recipient-list-endpoint.svg | 10 - .../wi/wi-extension/assets/dark-registry.svg | 25 - .../assets/dark-resequence-message-store.svg | 11 - ...-failover-message-forwarding-processor.svg | 12 - ...scheduled-message-forwarding-processor.svg | 12 - .../assets/dark-sequence-template.svg | 6 - .../wi/wi-extension/assets/dark-settings.svg | 1 - .../wi/wi-extension/assets/dark-start.svg | 20 - .../wi/wi-extension/assets/dark-task.svg | 21 - .../wi/wi-extension/assets/dark-tasklist.svg | 1 - .../assets/dark-template-endpoint.svg | 8 - .../wi/wi-extension/assets/dark-template.svg | 23 - .../assets/dark-type-hierarchy.svg | 1 - .../wi/wi-extension/assets/dark-type.svg | 21 - .../assets/dark-user-defined-endpoint.svg | 7 - .../wi-extension/assets/dark-ws-endpoint.svg | 16 - .../assets/dark-wsdl-endpoint-template.svg | 11 - .../assets/dark-wsdl-endpoint.svg | 8 - .../assets/dark-wso2-mb-message-store.svg | 9 - .../wi-extension/assets/dark-wss-endpoint.svg | 8 - workspaces/wi/wi-extension/assets/icon.svg | 67 - .../wi-extension/assets/light-APIResource.svg | 21 - .../wi/wi-extension/assets/light-Sequence.svg | 24 - .../light-address-endpoint-template.svg | 7 - .../assets/light-address-endpoint.svg | 5 - .../wi-extension/assets/light-arrow-swap.svg | 1 - .../wi-extension/assets/light-bi-ai-agent.svg | 22 - .../wi/wi-extension/assets/light-bi-asb.svg | 19 - .../wi-extension/assets/light-bi-config.svg | 23 - .../assets/light-bi-connection.svg | 21 - .../wi/wi-extension/assets/light-bi-file.svg | 18 - .../wi/wi-extension/assets/light-bi-ftp.svg | 18 - .../wi-extension/assets/light-bi-function.svg | 21 - .../wi-extension/assets/light-bi-github.svg | 21 - .../wi/wi-extension/assets/light-bi-globe.svg | 21 - .../wi-extension/assets/light-bi-graphql.svg | 20 - .../wi/wi-extension/assets/light-bi-grpc.svg | 20 - .../assets/light-bi-http-service.svg | 21 - .../wi/wi-extension/assets/light-bi-java.svg | 20 - .../wi/wi-extension/assets/light-bi-kafka.svg | 20 - .../wi/wi-extension/assets/light-bi-mqtt.svg | 20 - .../wi/wi-extension/assets/light-bi-nats.svg | 20 - .../wi-extension/assets/light-bi-rabbitmq.svg | 20 - .../assets/light-bi-salesforce.svg | 18 - .../wi/wi-extension/assets/light-bi-task.svg | 21 - .../wi/wi-extension/assets/light-bi-tcp.svg | 19 - .../wi/wi-extension/assets/light-bi-type.svg | 22 - .../wi-extension/assets/light-class-icon.svg | 65 - .../wi/wi-extension/assets/light-config.svg | 23 - .../wi-extension/assets/light-connection.svg | 21 - .../assets/light-custom-message-processor.svg | 12 - .../assets/light-custom-message-store.svg | 8 - .../assets/light-cxf-ws-rm-endpoint.svg | 13 - .../assets/light-data-service.svg | 4 - .../wi-extension/assets/light-data-source.svg | 7 - .../wi-extension/assets/light-dataMapper.svg | 45 - .../wi/wi-extension/assets/light-database.svg | 1 - .../light-default-endpoint-template.svg | 6 - .../assets/light-default-endpoint.svg | 4 - .../wi-extension/assets/light-delete-api.svg | 9 - .../wi/wi-extension/assets/light-endpoint.svg | 23 - .../assets/light-failover-endpoint.svg | 8 - .../assets/light-feed-endpoint.svg | 8 - .../assets/light-file-endpoint.svg | 7 - .../wi/wi-extension/assets/light-file.svg | 1 - .../wi-extension/assets/light-fold-down.svg | 1 - .../wi/wi-extension/assets/light-function.svg | 21 - .../wi/wi-extension/assets/light-gear.svg | 1 - .../wi/wi-extension/assets/light-get-api.svg | 6 - .../wi/wi-extension/assets/light-globe.svg | 1 - .../wi/wi-extension/assets/light-head-api.svg | 7 - .../assets/light-hl7-endpoint.svg | 8 - .../assets/light-http-endpoint-template.svg | 11 - .../assets/light-http-endpoint.svg | 8 - .../assets/light-http-inbound-endpoint.svg | 9 - .../assets/light-http-service.svg | 21 - .../assets/light-https-endpoint.svg | 10 - .../wi/wi-extension/assets/light-icon.svg | 67 - .../assets/light-in-memory-message-store.svg | 10 - .../assets/light-inbound-endpoint.svg | 22 - .../assets/light-jdbc-message-store.svg | 9 - .../assets/light-jms-endpoint.svg | 51 - .../assets/light-jms-message-store.svg | 52 - .../assets/light-kafka-endpoint.svg | 6 - .../assets/light-list-ordered.svg | 1 - .../assets/light-load-balance-endpoint.svg | 10 - .../wi-extension/assets/light-local-entry.svg | 21 - .../assets/light-message-processor.svg | 22 - .../light-message-sampling-processor.svg | 12 - .../assets/light-message-store.svg | 9 - .../assets/light-mqtt-endpoint.svg | 9 - .../wi-extension/assets/light-options-api.svg | 10 - .../wi-extension/assets/light-patch-api.svg | 8 - .../wi/wi-extension/assets/light-plug.svg | 1 - .../wi/wi-extension/assets/light-post-api.svg | 7 - .../wi/wi-extension/assets/light-project.svg | 7 - .../wi/wi-extension/assets/light-put-api.svg | 6 - .../wi-extension/assets/light-rabbit-mq.svg | 6 - .../assets/light-rabbitmq-endpoint.svg | 6 - .../wi/wi-extension/assets/light-radio.svg | 25 - .../assets/light-recipient-list-endpoint.svg | 10 - .../wi/wi-extension/assets/light-registry.svg | 42 - .../assets/light-resequence-message-store.svg | 11 - ...-failover-message-forwarding-processor.svg | 12 - ...scheduled-message-forwarding-processor.svg | 12 - .../assets/light-sequence-template.svg | 6 - .../wi/wi-extension/assets/light-settings.svg | 1 - .../wi/wi-extension/assets/light-start.svg | 20 - .../wi/wi-extension/assets/light-task.svg | 21 - .../wi/wi-extension/assets/light-tasklist.svg | 1 - .../assets/light-template-endpoint.svg | 8 - .../wi/wi-extension/assets/light-template.svg | 23 - .../assets/light-type-hierarchy.svg | 1 - .../wi/wi-extension/assets/light-type.svg | 21 - .../assets/light-user-defined-endpoint.svg | 7 - .../wi-extension/assets/light-ws-endpoint.svg | 16 - .../assets/light-wsdl-endpoint-template.svg | 11 - .../assets/light-wsdl-endpoint.svg | 8 - .../assets/light-wso2-mb-message-store.svg | 9 - .../assets/light-wss-endpoint.svg | 8 - workspaces/wi/wi-extension/biome.json | 30 - .../wi/wi-extension/config/rush-project.json | 3 - workspaces/wi/wi-extension/package.json | 230 - .../resources/codicons/codicon.css | 571 --- .../resources/codicons/codicon.csv | 421 -- .../resources/codicons/codicon.html | 3871 ----------------- .../resources/codicons/codicon.svg | 1 - .../resources/codicons/codicon.ttf | Bin 72504 -> 0 bytes .../resources/icons/integrator-icon.svg | 10 - .../resources/icons/wso2-integrator-logo.png | 23 - workspaces/wi/wi-extension/src/RPCLayer.ts | 42 - workspaces/wi/wi-extension/src/bi/utils.ts | 79 - workspaces/wi/wi-extension/src/commands.ts | 117 - workspaces/wi/wi-extension/src/extension.ts | 53 - .../wi/wi-extension/src/extensionAPIs.ts | 113 - .../wi/wi-extension/src/extensionVariables.ts | 59 - workspaces/wi/wi-extension/src/mi/utils.ts | 44 - .../src/rpc-managers/main/ballerinaLogger.ts | 105 - .../rpc-managers/main/migrate-integration.ts | 271 -- .../src/rpc-managers/main/rpc-handler.ts | 76 - .../src/rpc-managers/main/rpc-manager.ts | 325 -- .../src/rpc-managers/main/utils.ts | 237 - .../wi/wi-extension/src/stateMachine.ts | 258 -- .../wi/wi-extension/src/webviewManager.ts | 259 -- workspaces/wi/wi-extension/tsconfig.json | 19 - workspaces/wi/wi-extension/webpack.config.js | 53 - .../wi/wi-rpc-client/config/rush-project.json | 3 - workspaces/wi/wi-rpc-client/eslint.config.cjs | 31 - workspaces/wi/wi-rpc-client/package.json | 37 - workspaces/wi/wi-rpc-client/src/RpcClient.ts | 57 - workspaces/wi/wi-rpc-client/src/index.ts | 19 - .../src/rpc-clients/main/rpc-client.ts | 153 - workspaces/wi/wi-rpc-client/src/vscode.ts | 95 - workspaces/wi/wi-rpc-client/tsconfig.json | 44 - workspaces/wi/wi-webviews/biome.json | 30 - .../wi/wi-webviews/config/rush-project.json | 3 - workspaces/wi/wi-webviews/package.json | 49 - .../wi/wi-webviews/src/IntegratorWebview.tsx | 54 - .../src/components/ButtonCard/index.tsx | 167 - .../IntegrationTypeSelector/index.tsx | 156 - .../src/components/Loader/index.tsx | 57 - .../wi-webviews/src/components/View/View.tsx | 37 - .../src/components/View/ViewContent.tsx | 42 - .../src/components/View/ViewHeader.tsx | 93 - .../wi-webviews/src/components/View/index.tsx | 21 - .../wi-webviews/src/contexts/RpcContext.tsx | 46 - .../wi/wi-webviews/src/contexts/index.ts | 20 - workspaces/wi/wi-webviews/src/index.tsx | 35 - workspaces/wi/wi-webviews/src/style.css | 36 - .../src/views/ImportIntegration/BetaSVG.tsx | 47 - .../ConfigureProjectForm.tsx | 77 - .../ImportIntegrationForm.tsx | 174 - .../MigrationProgressView.tsx | 156 - .../components/CoverageSummary.tsx | 90 - .../components/IntegrationParameters.tsx | 87 - .../components/MigrationLogs.tsx | 94 - .../components/MigrationStatusContent.tsx | 83 - .../components/ReportButtons.tsx | 48 - .../src/views/ImportIntegration/index.tsx | 200 - .../src/views/ImportIntegration/styles.ts | 359 -- .../src/views/ImportIntegration/types.ts | 85 - .../src/views/ImportIntegration/utils.ts | 83 - .../wi/wi-webviews/src/views/WelcomeView.css | 167 - .../wi/wi-webviews/src/views/WelcomeView.tsx | 495 --- .../creationView/biForm/ProjectFormFields.tsx | 207 - .../src/views/creationView/biForm/index.tsx | 78 - .../src/views/creationView/biForm/utils.ts | 73 - .../src/views/creationView/index.tsx | 130 - .../src/views/creationView/miForm/index.tsx | 222 - .../src/views/samplesView/index.tsx | 130 - .../src/views/samplesView/miSamples/index.tsx | 177 - workspaces/wi/wi-webviews/tsconfig.json | 45 - workspaces/wi/wi-webviews/webpack.config.js | 78 - 301 files changed, 16110 deletions(-) delete mode 100644 workspaces/wi/wi-core/biome.json delete mode 100644 workspaces/wi/wi-core/config/rush-project.json delete mode 100644 workspaces/wi/wi-core/package.json delete mode 100644 workspaces/wi/wi-core/src/constants.ts delete mode 100644 workspaces/wi/wi-core/src/enums.ts delete mode 100644 workspaces/wi/wi-core/src/index.ts delete mode 100644 workspaces/wi/wi-core/src/rpc-types/main/index.ts delete mode 100644 workspaces/wi/wi-core/src/rpc-types/main/rpc-type.ts delete mode 100644 workspaces/wi/wi-core/src/rpc-types/migrate-integration/index.ts delete mode 100644 workspaces/wi/wi-core/src/rpc-types/migrate-integration/interfaces.ts delete mode 100644 workspaces/wi/wi-core/src/rpc-types/migrate-integration/rpc-type.ts delete mode 100644 workspaces/wi/wi-core/src/types/common.types.ts delete mode 100644 workspaces/wi/wi-core/src/types/index.ts delete mode 100644 workspaces/wi/wi-core/src/types/rpc.types.ts delete mode 100644 workspaces/wi/wi-core/src/types/webview-props.types.ts delete mode 100644 workspaces/wi/wi-core/src/utils.ts delete mode 100644 workspaces/wi/wi-core/tsconfig.json delete mode 100644 workspaces/wi/wi-extension/.env.example delete mode 100644 workspaces/wi/wi-extension/.gitignore delete mode 100644 workspaces/wi/wi-extension/.vscode/launch.json delete mode 100644 workspaces/wi/wi-extension/.vscode/settings.json delete mode 100644 workspaces/wi/wi-extension/.vscode/tasks.json delete mode 100644 workspaces/wi/wi-extension/.vscodeignore delete mode 100644 workspaces/wi/wi-extension/CHANGELOG.md delete mode 100644 workspaces/wi/wi-extension/LICENSE delete mode 100644 workspaces/wi/wi-extension/README.md delete mode 100644 workspaces/wi/wi-extension/assets/ballerina.svg delete mode 100644 workspaces/wi/wi-extension/assets/bi-logo.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-APIResource.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-Sequence.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-address-endpoint-template.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-address-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-arrow-swap.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-ai-agent.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-asb.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-config.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-connection.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-file.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-ftp.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-function.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-github.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-globe.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-graphql.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-grpc.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-http-service.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-java.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-kafka.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-mqtt.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-nats.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-rabbitmq.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-salesforce.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-task.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-tcp.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-bi-type.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-class-icon.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-config.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-connection.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-custom-message-processor.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-custom-message-store.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-cxf-ws-rm-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-data-service.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-data-source.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-dataMapper.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-database.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-default-endpoint-template.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-default-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-delete-api.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-failover-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-feed-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-file-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-file.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-fold-down.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-function.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-gear.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-get-api.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-globe.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-head-api.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-hl7-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-http-endpoint-template.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-http-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-http-inbound-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-http-service.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-https-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-icon.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-in-memory-message-store.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-inbound-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-jdbc-message-store.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-jms-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-jms-message-store.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-kafka-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-list-ordered.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-load-balance-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-local-entry.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-message-processor.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-message-sampling-processor.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-message-store.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-mqtt-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-options-api.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-patch-api.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-plug.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-post-api.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-project.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-put-api.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-rabbit-mq.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-rabbitmq-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-radio.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-recipient-list-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-registry.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-resequence-message-store.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-scheduled-failover-message-forwarding-processor.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-scheduled-message-forwarding-processor.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-sequence-template.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-settings.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-start.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-task.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-tasklist.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-template-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-template.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-type-hierarchy.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-type.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-user-defined-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-ws-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-wsdl-endpoint-template.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-wsdl-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-wso2-mb-message-store.svg delete mode 100644 workspaces/wi/wi-extension/assets/dark-wss-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/icon.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-APIResource.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-Sequence.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-address-endpoint-template.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-address-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-arrow-swap.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-ai-agent.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-asb.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-config.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-connection.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-file.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-ftp.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-function.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-github.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-globe.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-graphql.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-grpc.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-http-service.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-java.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-kafka.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-mqtt.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-nats.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-rabbitmq.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-salesforce.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-task.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-tcp.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-bi-type.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-class-icon.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-config.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-connection.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-custom-message-processor.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-custom-message-store.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-cxf-ws-rm-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-data-service.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-data-source.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-dataMapper.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-database.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-default-endpoint-template.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-default-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-delete-api.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-failover-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-feed-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-file-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-file.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-fold-down.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-function.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-gear.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-get-api.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-globe.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-head-api.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-hl7-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-http-endpoint-template.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-http-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-http-inbound-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-http-service.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-https-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-icon.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-in-memory-message-store.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-inbound-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-jdbc-message-store.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-jms-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-jms-message-store.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-kafka-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-list-ordered.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-load-balance-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-local-entry.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-message-processor.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-message-sampling-processor.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-message-store.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-mqtt-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-options-api.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-patch-api.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-plug.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-post-api.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-project.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-put-api.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-rabbit-mq.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-rabbitmq-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-radio.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-recipient-list-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-registry.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-resequence-message-store.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-scheduled-failover-message-forwarding-processor.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-scheduled-message-forwarding-processor.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-sequence-template.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-settings.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-start.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-task.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-tasklist.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-template-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-template.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-type-hierarchy.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-type.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-user-defined-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-ws-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-wsdl-endpoint-template.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-wsdl-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-wso2-mb-message-store.svg delete mode 100644 workspaces/wi/wi-extension/assets/light-wss-endpoint.svg delete mode 100644 workspaces/wi/wi-extension/biome.json delete mode 100644 workspaces/wi/wi-extension/config/rush-project.json delete mode 100644 workspaces/wi/wi-extension/package.json delete mode 100644 workspaces/wi/wi-extension/resources/codicons/codicon.css delete mode 100644 workspaces/wi/wi-extension/resources/codicons/codicon.csv delete mode 100644 workspaces/wi/wi-extension/resources/codicons/codicon.html delete mode 100644 workspaces/wi/wi-extension/resources/codicons/codicon.svg delete mode 100644 workspaces/wi/wi-extension/resources/codicons/codicon.ttf delete mode 100644 workspaces/wi/wi-extension/resources/icons/integrator-icon.svg delete mode 100644 workspaces/wi/wi-extension/resources/icons/wso2-integrator-logo.png delete mode 100644 workspaces/wi/wi-extension/src/RPCLayer.ts delete mode 100644 workspaces/wi/wi-extension/src/bi/utils.ts delete mode 100644 workspaces/wi/wi-extension/src/commands.ts delete mode 100644 workspaces/wi/wi-extension/src/extension.ts delete mode 100644 workspaces/wi/wi-extension/src/extensionAPIs.ts delete mode 100644 workspaces/wi/wi-extension/src/extensionVariables.ts delete mode 100644 workspaces/wi/wi-extension/src/mi/utils.ts delete mode 100644 workspaces/wi/wi-extension/src/rpc-managers/main/ballerinaLogger.ts delete mode 100644 workspaces/wi/wi-extension/src/rpc-managers/main/migrate-integration.ts delete mode 100644 workspaces/wi/wi-extension/src/rpc-managers/main/rpc-handler.ts delete mode 100644 workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts delete mode 100644 workspaces/wi/wi-extension/src/rpc-managers/main/utils.ts delete mode 100644 workspaces/wi/wi-extension/src/stateMachine.ts delete mode 100644 workspaces/wi/wi-extension/src/webviewManager.ts delete mode 100644 workspaces/wi/wi-extension/tsconfig.json delete mode 100644 workspaces/wi/wi-extension/webpack.config.js delete mode 100644 workspaces/wi/wi-rpc-client/config/rush-project.json delete mode 100644 workspaces/wi/wi-rpc-client/eslint.config.cjs delete mode 100644 workspaces/wi/wi-rpc-client/package.json delete mode 100644 workspaces/wi/wi-rpc-client/src/RpcClient.ts delete mode 100644 workspaces/wi/wi-rpc-client/src/index.ts delete mode 100644 workspaces/wi/wi-rpc-client/src/rpc-clients/main/rpc-client.ts delete mode 100644 workspaces/wi/wi-rpc-client/src/vscode.ts delete mode 100644 workspaces/wi/wi-rpc-client/tsconfig.json delete mode 100644 workspaces/wi/wi-webviews/biome.json delete mode 100644 workspaces/wi/wi-webviews/config/rush-project.json delete mode 100644 workspaces/wi/wi-webviews/package.json delete mode 100644 workspaces/wi/wi-webviews/src/IntegratorWebview.tsx delete mode 100644 workspaces/wi/wi-webviews/src/components/ButtonCard/index.tsx delete mode 100644 workspaces/wi/wi-webviews/src/components/IntegrationTypeSelector/index.tsx delete mode 100644 workspaces/wi/wi-webviews/src/components/Loader/index.tsx delete mode 100644 workspaces/wi/wi-webviews/src/components/View/View.tsx delete mode 100644 workspaces/wi/wi-webviews/src/components/View/ViewContent.tsx delete mode 100644 workspaces/wi/wi-webviews/src/components/View/ViewHeader.tsx delete mode 100644 workspaces/wi/wi-webviews/src/components/View/index.tsx delete mode 100644 workspaces/wi/wi-webviews/src/contexts/RpcContext.tsx delete mode 100644 workspaces/wi/wi-webviews/src/contexts/index.ts delete mode 100644 workspaces/wi/wi-webviews/src/index.tsx delete mode 100644 workspaces/wi/wi-webviews/src/style.css delete mode 100644 workspaces/wi/wi-webviews/src/views/ImportIntegration/BetaSVG.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/ImportIntegration/ConfigureProjectForm.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/ImportIntegration/ImportIntegrationForm.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/ImportIntegration/MigrationProgressView.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/ImportIntegration/components/CoverageSummary.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/ImportIntegration/components/IntegrationParameters.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/ImportIntegration/components/MigrationLogs.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/ImportIntegration/components/MigrationStatusContent.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/ImportIntegration/components/ReportButtons.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/ImportIntegration/index.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/ImportIntegration/styles.ts delete mode 100644 workspaces/wi/wi-webviews/src/views/ImportIntegration/types.ts delete mode 100644 workspaces/wi/wi-webviews/src/views/ImportIntegration/utils.ts delete mode 100644 workspaces/wi/wi-webviews/src/views/WelcomeView.css delete mode 100644 workspaces/wi/wi-webviews/src/views/WelcomeView.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/creationView/biForm/ProjectFormFields.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/creationView/biForm/index.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/creationView/biForm/utils.ts delete mode 100644 workspaces/wi/wi-webviews/src/views/creationView/index.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/creationView/miForm/index.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/samplesView/index.tsx delete mode 100644 workspaces/wi/wi-webviews/src/views/samplesView/miSamples/index.tsx delete mode 100644 workspaces/wi/wi-webviews/tsconfig.json delete mode 100644 workspaces/wi/wi-webviews/webpack.config.js diff --git a/rush.json b/rush.json index c97aaefa55f..33a7790dbd0 100644 --- a/rush.json +++ b/rush.json @@ -615,22 +615,6 @@ { "packageName": "mcp-server-inspector", "projectFolder": "workspaces/mcp-inspector/mcp-inspector-extension" - }, - { - "packageName": "@wso2/wi-core", - "projectFolder": "workspaces/wi/wi-core" - }, - { - "packageName": "wso2-integrator", - "projectFolder": "workspaces/wi/wi-extension" - }, - { - "packageName": "@wso2/wi-webviews", - "projectFolder": "workspaces/wi/wi-webviews" - }, - { - "packageName": "@wso2/wi-rpc-client", - "projectFolder": "workspaces/wi/wi-rpc-client" } ] } diff --git a/workspaces/wi/wi-core/biome.json b/workspaces/wi/wi-core/biome.json deleted file mode 100644 index bcec3347ac9..00000000000 --- a/workspaces/wi/wi-core/biome.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", - "vcs": { - "enabled": false, - "clientKind": "git", - "useIgnoreFile": false - }, - "files": { - "ignoreUnknown": false, - "ignore": [] - }, - "formatter": { - "enabled": true, - "indentStyle": "tab" - }, - "organizeImports": { - "enabled": true - }, - "linter": { - "enabled": true, - "rules": { - "recommended": false - } - }, - "javascript": { - "formatter": { - "quoteStyle": "double" - } - } -} diff --git a/workspaces/wi/wi-core/config/rush-project.json b/workspaces/wi/wi-core/config/rush-project.json deleted file mode 100644 index 3c3241c8f6a..00000000000 --- a/workspaces/wi/wi-core/config/rush-project.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../../rush-config.json" -} diff --git a/workspaces/wi/wi-core/package.json b/workspaces/wi/wi-core/package.json deleted file mode 100644 index a6663488c78..00000000000 --- a/workspaces/wi/wi-core/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "@wso2/wi-core", - "version": "1.0.0", - "description": "Contains models and types for WSO2 Integrator Extension", - "main": "lib/index.js", - "types": "lib/index.d.ts", - "scripts": { - "lint": "biome check .", - "lint:fix": "biome check --write .", - "build": "tsc --pretty", - "watch": "tsc --pretty --watch", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "WSO2", - "license": "Apache-2.0", - "devDependencies": { - "typescript": "5.8.3", - "@biomejs/biome": "^1.9.4", - "@types/vscode": "^1.100.0" - }, - "dependencies": { - "vscode-messenger-common": "^0.5.1", - "vscode-messenger-webview": "^0.5.1" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/wso2/ballerina-plugin-vscode.git" - } -} diff --git a/workspaces/wi/wi-core/src/constants.ts b/workspaces/wi/wi-core/src/constants.ts deleted file mode 100644 index 1270923a5de..00000000000 --- a/workspaces/wi/wi-core/src/constants.ts +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Extension constants - */ -export const EXTENSION_ID = "wso2-integrator"; -export const EXTENSION_NAME = "WSO2 Integrator"; -export const EXTENSION_PUBLISHER = "wso2"; - -/** - * Command constants - */ -export const COMMANDS = { - OPEN_WELCOME: "wso2.integrator.openWelcome", - REFRESH_VIEW: "wso2.integrator.refreshView", - OPEN_BI_INTEGRATION: "wso2.integrator.openBIIntegration", - OPEN_MI_INTEGRATION: "wso2.integrator.openMIIntegration", - CREATE_PROJECT: "wso2.integrator.createProject", - EXPLORE_SAMPLES: "wso2.integrator.exploreSamples", - IMPORT_PROJECT: "wso2.integrator.importProject", -}; - -/** - * View constants - */ -export const VIEWS = { - INTEGRATOR_EXPLORER: "wso2-integrator.explorer", -}; - -/** - * Context keys - */ -export const CONTEXT_KEYS = { - BI_AVAILABLE: "wso2-integrator.bi.available", - MI_AVAILABLE: "wso2-integrator.mi.available", -}; - -/** - * Extension dependencies - */ -export const EXTENSION_DEPENDENCIES = { - BI: "wso2.ballerina-integrator", - MI: "wso2.micro-integrator", -}; diff --git a/workspaces/wi/wi-core/src/enums.ts b/workspaces/wi/wi-core/src/enums.ts deleted file mode 100644 index e34d721ecbf..00000000000 --- a/workspaces/wi/wi-core/src/enums.ts +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Integration type enumeration - */ -export enum IntegrationType { - BI = "BI", - MI = "MI", -} - -/** - * View types for webviews - */ -export enum ViewType { - WELCOME = "welcome", - CREATE_PROJECT = "create_project", - SAMPLES = "samples", - IMPORT_EXTERNAL = "import_external" -} - -/** - * Extension status enumeration - */ -export enum ExtensionStatus { - UNKNOWN_PROJECT = "unknownProject", - LOADING = "loading", - READY = "ready", - NO_LS = "noLS", - UPDATE_NEEDED = "updateNeed", -} diff --git a/workspaces/wi/wi-core/src/index.ts b/workspaces/wi/wi-core/src/index.ts deleted file mode 100644 index 522a21833cc..00000000000 --- a/workspaces/wi/wi-core/src/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export * from "./constants"; -export * from "./enums"; -export * from "./utils"; -export * from "./types"; -export * from "./rpc-types/main"; diff --git a/workspaces/wi/wi-core/src/rpc-types/main/index.ts b/workspaces/wi/wi-core/src/rpc-types/main/index.ts deleted file mode 100644 index d22ef685143..00000000000 --- a/workspaces/wi/wi-core/src/rpc-types/main/index.ts +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { RunCommandRequest, RunCommandResponse, FileOrDirRequest, FileOrDirResponse, WorkspaceRootResponse, GetConfigurationRequest, GetConfigurationResponse, GetSubFoldersRequest, GetSubFoldersResponse, ProjectDirResponse, GetSupportedMIVersionsResponse, GettingStartedData, SampleDownloadRequest, BIProjectRequest, CreateMiProjectRequest, CreateMiProjectResponse, GetMigrationToolsResponse, MigrateRequest, PullMigrationToolRequest, ImportIntegrationRPCRequest, ImportIntegrationResponse, ShowErrorMessageRequest } from "../../types/rpc.types"; - -export * from "./rpc-type"; -export * from "../../types/rpc.types"; - -export interface WIVisualizerAPI { - openBiExtension: () => void; - openMiExtension: () => void; - runCommand: (params: RunCommandRequest) => Promise; - selectFileOrDirPath: (params: FileOrDirRequest) => Promise; - selectFileOrFolderPath: () => Promise; - getWorkspaceRoot: () => Promise; - getConfiguration: (params: GetConfigurationRequest) => Promise; - getSupportedMIVersionsHigherThan: (version: string) => Promise; - getSubFolderNames: (params: GetSubFoldersRequest) => Promise; - askProjectDirPath: () => Promise; - createMiProject: (params: CreateMiProjectRequest) => Promise; - fetchSamplesFromGithub: () => Promise; - downloadSelectedSampleFromGithub: (params: SampleDownloadRequest) => void; - createBIProject: (params: BIProjectRequest) => Promise; - getMigrationTools: () => Promise; - migrateProject: (params: MigrateRequest) => Promise; - pullMigrationTool: (params: PullMigrationToolRequest) => Promise; - importIntegration: (params: ImportIntegrationRPCRequest) => Promise; - showErrorMessage: (params: ShowErrorMessageRequest) => Promise; -} diff --git a/workspaces/wi/wi-core/src/rpc-types/main/rpc-type.ts b/workspaces/wi/wi-core/src/rpc-types/main/rpc-type.ts deleted file mode 100644 index 16b93b72ca8..00000000000 --- a/workspaces/wi/wi-core/src/rpc-types/main/rpc-type.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - * THIS FILE INCLUDES AUTO GENERATED CODE - */ -import { RunCommandRequest, RunCommandResponse, FileOrDirRequest, FileOrDirResponse, WorkspaceRootResponse, GetConfigurationRequest, GetConfigurationResponse, GetSubFoldersRequest, GetSubFoldersResponse, ProjectDirResponse, GetSupportedMIVersionsResponse, GettingStartedData, SampleDownloadRequest, BIProjectRequest, CreateMiProjectRequest, CreateMiProjectResponse, DownloadProgress, GetMigrationToolsResponse, MigrateRequest, PullMigrationToolRequest, ImportIntegrationRPCRequest, ImportIntegrationResponse, ShowErrorMessageRequest, MigrationToolStateData, MigrationToolLogData } from "../../types/rpc.types"; -import { NotificationType, RequestType } from "vscode-messenger-common"; - -const _preFix = "main"; -export const openBiExtension: NotificationType = { method: `${_preFix}/openBiExtension` }; -export const openMiExtension: NotificationType = { method: `${_preFix}/openMiExtension` }; -export const runCommand: RequestType = { method: `${_preFix}/runCommand` }; -export const selectFileOrDirPath: RequestType = { method: `${_preFix}/selectFileOrDirPath` }; -export const selectFileOrFolderPath: RequestType = { method: `${_preFix}/selectFileOrFolderPath` }; -export const getWorkspaceRoot: RequestType = { method: `${_preFix}/getWorkspaceRoot` }; -export const getConfiguration: RequestType = { method: `${_preFix}/getConfiguration` }; -export const getSupportedMIVersionsHigherThan: RequestType = { method: `${_preFix}/getSupportedMIVersionsHigherThan` }; -export const getSubFolderNames: RequestType = { method: `${_preFix}/getSubFolderNames` }; -export const askProjectDirPath: RequestType = { method: `${_preFix}/askProjectDirPath` }; -export const createMiProject: RequestType = { method: `${_preFix}/createMiProject` }; -export const fetchSamplesFromGithub: RequestType = { method: `${_preFix}/fetchSamplesFromGithub` }; -export const downloadSelectedSampleFromGithub: NotificationType = { method: `${_preFix}/downloadSelectedSampleFromGithub` }; -export const createBIProject: RequestType = { method: `${_preFix}/createBIProject` }; -export const onDownloadProgress: NotificationType = { method: `${_preFix}/onDownloadProgress` }; -export const onMigrationToolStateChanged: NotificationType = { method: `${_preFix}/onMigrationToolStateChanged` }; -export const onMigrationToolLogs: NotificationType = { method: `${_preFix}/onMigrationToolLogs` }; -export const getMigrationTools: RequestType = { method: `${_preFix}/getMigrationTools` }; -export const migrateProject: RequestType = { method: `${_preFix}/migrateProject` }; -export const pullMigrationTool: RequestType = { method: `${_preFix}/pullMigrationTool` }; -export const importIntegration: RequestType = { method: `${_preFix}/importIntegration` }; -export const showErrorMessage: RequestType = { method: `${_preFix}/showErrorMessage` }; diff --git a/workspaces/wi/wi-core/src/rpc-types/migrate-integration/index.ts b/workspaces/wi/wi-core/src/rpc-types/migrate-integration/index.ts deleted file mode 100644 index 8df6396ace4..00000000000 --- a/workspaces/wi/wi-core/src/rpc-types/migrate-integration/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { GetMigrationToolsResponse, ImportIntegrationResponse, ImportIntegrationRPCRequest, MigrateRequest, MigrationToolPullRequest, OpenMigrationReportRequest, SaveMigrationReportRequest } from "./interfaces"; - -export * from "./interfaces"; -export * from "./rpc-type"; - -export interface MigrateIntegrationAPI { - getMigrationTools: () => Promise; - pullMigrationTool: (params: MigrationToolPullRequest) => void; - importIntegration: (params: ImportIntegrationRPCRequest) => Promise; - openMigrationReport: (params: OpenMigrationReportRequest) => void; - saveMigrationReport: (params: SaveMigrationReportRequest) => void; - migrateProject: (params: MigrateRequest) => void; -} diff --git a/workspaces/wi/wi-core/src/rpc-types/migrate-integration/interfaces.ts b/workspaces/wi/wi-core/src/rpc-types/migrate-integration/interfaces.ts deleted file mode 100644 index 94cae6cb073..00000000000 --- a/workspaces/wi/wi-core/src/rpc-types/migrate-integration/interfaces.ts +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export interface MigrationTool { - id: number; - title: string; - needToPull: boolean; - commandName: string; - description: string; - requiredVersion: string; - parameters: Array<{ - key: string; - label: string; - description: string; - valueType: "boolean" | "string" | "number" | "enum"; - defaultValue?: boolean | string | number; - options?: string[]; - }>; -} - -export interface GetMigrationToolsResponse { - tools: MigrationTool[]; -} - -export interface MigrationToolPullRequest { - toolName: string; - version: string; -} - -export interface ImportIntegrationRPCRequest { - commandName: string; - packageName: string; - sourcePath: string; - parameters?: Record; -} - -export interface OpenMigrationReportRequest { - reportContent: string; - fileName: string; -} - -export interface ImportIntegrationResponse { - error: string; - textEdits: { - [key: string]: string; - }; - report: string; - jsonReport: string; -} - -export interface SaveMigrationReportRequest { - reportContent: string; - defaultFileName: string; -} - -export interface MigrateRequest { - project: ProjectRequest; - textEdits: { - [key: string]: string; - }; -} - -export interface ProjectRequest { - projectName: string; - packageName: string; - projectPath: string; - createDirectory: boolean; - orgName?: string; - version?: string; -} - -export interface DownloadProgress { - totalSize?: number; - downloadedSize?: number; - percentage?: number; - success: boolean; - message: string; - step?: number; -} diff --git a/workspaces/wi/wi-core/src/rpc-types/migrate-integration/rpc-type.ts b/workspaces/wi/wi-core/src/rpc-types/migrate-integration/rpc-type.ts deleted file mode 100644 index f8bb3f39bc9..00000000000 --- a/workspaces/wi/wi-core/src/rpc-types/migrate-integration/rpc-type.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - * THIS FILE INCLUDES AUTO GENERATED CODE - */ -import { GetMigrationToolsResponse, ImportIntegrationResponse, ImportIntegrationRPCRequest, MigrateRequest, MigrationToolPullRequest, OpenMigrationReportRequest, SaveMigrationReportRequest } from "./interfaces"; -import { RequestType, NotificationType } from "vscode-messenger-common"; - -const _preFix = "migrate-integration"; -export const getMigrationTools: RequestType = { method: `${_preFix}/getMigrationTools` }; -export const pullMigrationTool: NotificationType = { method: `${_preFix}/pullMigrationTool` }; -export const importIntegration: RequestType = { method: `${_preFix}/importIntegration` }; -export const openMigrationReport: NotificationType = { method: `${_preFix}/openMigrationReport` }; -export const saveMigrationReport: NotificationType = { method: `${_preFix}/saveMigrationReport` }; -export const migrateProject: NotificationType = { method: `${_preFix}/migrateProject` }; diff --git a/workspaces/wi/wi-core/src/types/common.types.ts b/workspaces/wi/wi-core/src/types/common.types.ts deleted file mode 100644 index eddf8b01963..00000000000 --- a/workspaces/wi/wi-core/src/types/common.types.ts +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import type { IntegrationType } from "../enums"; - -/** - * Tree item data interface - */ -export interface TreeItemData { - id: string; - label: string; - description?: string; - tooltip?: string; - contextValue?: string; - iconPath?: string; - collapsibleState?: number; - command?: { - command: string; - title: string; - arguments?: unknown[]; - }; -} - -/** - * Integration item interface - */ -export interface IntegrationItem { - type: IntegrationType; - label: string; - description: string; - items: TreeItemData[]; -} - -/** - * Extension API interface for BI extension - */ -export interface BIExtensionAPI { - getProjectExplorerItems(): Promise; - getStatus(): string; -} - -/** - * Extension API interface for MI extension - */ -export interface MIExtensionAPI { - getProjectExplorerItems(): Promise; - getStatus(): string; -} diff --git a/workspaces/wi/wi-core/src/types/index.ts b/workspaces/wi/wi-core/src/types/index.ts deleted file mode 100644 index 0125ab75656..00000000000 --- a/workspaces/wi/wi-core/src/types/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export * from "./webview-props.types"; -export * from "./common.types"; -export * from "./rpc.types"; diff --git a/workspaces/wi/wi-core/src/types/rpc.types.ts b/workspaces/wi/wi-core/src/types/rpc.types.ts deleted file mode 100644 index 3061b73778f..00000000000 --- a/workspaces/wi/wi-core/src/types/rpc.types.ts +++ /dev/null @@ -1,188 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export interface RunCommandRequest { - command: string; - args?: any[]; -} - -export interface RunCommandResponse { - success: boolean; - result?: any; - error?: string; -} - -export interface FileOrDirResponse { - path: string; -} - -export interface FileOrDirRequest { - isFile?: boolean; -} - -export interface WorkspaceRootResponse { - path: string; -} - -export interface GetConfigurationRequest { - section: string; -} - -export interface GetConfigurationResponse { - value: any; -} - -export interface GetSubFoldersRequest { - path: string; -} - -export interface GetSubFoldersResponse { - folders: string[]; -} - -export interface ProjectDirResponse { - path: string; -} - -export interface GetSupportedMIVersionsResponse { - versions: string[]; -} - -export interface CreateMiProjectRequest { - directory: string; - name: string; - open: boolean; - groupID?: string; - artifactID?: string; - version?: string; - miVersion: string; -} - -export interface CreateMiProjectResponse { - filePath: string; -} - -export interface GettingStartedSample { - category: number; - priority: number; - title: string; - description: string; - zipFileName: string; - isAvailable?: boolean; -} - -export interface GettingStartedCategory { - id: number; - title: string; - icon: string; -} - -export interface GettingStartedData { - categories: GettingStartedCategory[]; - samples: GettingStartedSample[]; -} - -export interface SampleDownloadRequest { - zipFileName: string; -} - -export interface BIProjectRequest { - projectName: string; - packageName: string; - projectPath: string; - createDirectory: boolean; - orgName?: string; - version?: string; -} - -export interface MigrationTool { - id: number; - title: string; - needToPull: boolean; - commandName: string; - description: string; - requiredVersion: string; - parameters: Array<{ - key: string; - label: string; - description: string; - valueType: "boolean" | "string" | "number" | "enum"; - defaultValue?: boolean | string | number; - options?: string[]; - }>; -} - -export interface GetMigrationToolsResponse { - tools: MigrationTool[]; -} - -export interface DownloadProgress { - totalSize?: number; - downloadedSize?: number; - percentage?: number; - success: boolean; - message: string; - step?: number; -} - -export interface ImportIntegrationResponse { - error: string; - textEdits: { - [key: string]: string; - }; - report: string; - jsonReport: string; -} - -export interface MigrateRequest { - project: BIProjectRequest; - textEdits: { - [key: string]: string; - }; -} - -export interface PullMigrationToolRequest { - toolName: string; - version: string; -} - -export interface ImportIntegrationRPCRequest { - commandName: string; - packageName: string; - sourcePath: string; - parameters?: Record; -} - -export interface ImportIntegrationRequest { - packageName: string; - orgName: string; - sourcePath: string; - parameters?: Record; -} - -export interface ShowErrorMessageRequest { - message: string; -} - -export interface MigrationToolStateData { - state: string; -} - -export interface MigrationToolLogData { - log: string; -} diff --git a/workspaces/wi/wi-core/src/types/webview-props.types.ts b/workspaces/wi/wi-core/src/types/webview-props.types.ts deleted file mode 100644 index 0e5c7fdf681..00000000000 --- a/workspaces/wi/wi-core/src/types/webview-props.types.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import type { IntegrationType, ViewType } from "../enums"; - -/** - * Webview properties - */ -export interface WebviewProps { - type: ViewType; - biAvailable: boolean; - miAvailable: boolean; -} diff --git a/workspaces/wi/wi-core/src/utils.ts b/workspaces/wi/wi-core/src/utils.ts deleted file mode 100644 index efe1274f65c..00000000000 --- a/workspaces/wi/wi-core/src/utils.ts +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * Utility functions for WSO2 Integrator Core - */ - -/** - * Check if a value is defined and not null - */ -export function isDefined(value: T | undefined | null): value is T { - return value !== undefined && value !== null; -} - -/** - * Safely get a property from an object - */ -export function getProperty(obj: T, key: K): T[K] | undefined { - return obj?.[key]; -} - -/** - * Format error message - */ -export function formatError(error: unknown): string { - if (error instanceof Error) { - return error.message; - } - return String(error); -} diff --git a/workspaces/wi/wi-core/tsconfig.json b/workspaces/wi/wi-core/tsconfig.json deleted file mode 100644 index 7ccd6b4b0b4..00000000000 --- a/workspaces/wi/wi-core/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "commonjs", - "lib": ["ES2020"], - "declaration": true, - "declarationMap": true, - "sourceMap": true, - "outDir": "./lib", - "rootDir": "./src", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "moduleResolution": "node", - "resolveJsonModule": true - }, - "include": ["src/**/*"], - "exclude": ["node_modules", "lib"] -} diff --git a/workspaces/wi/wi-extension/.env.example b/workspaces/wi/wi-extension/.env.example deleted file mode 100644 index 0f97586f1f4..00000000000 --- a/workspaces/wi/wi-extension/.env.example +++ /dev/null @@ -1,15 +0,0 @@ -# Environment Configuration (optional) -# Copy this file to .env and configure as needed - -# Extension Development -# Set to 'development' for verbose logging -NODE_ENV=production - -# Feature Flags -# Enable experimental features -ENABLE_EXPERIMENTAL_FEATURES=false - -# Webview Development -# Use local webview server for hot reload (development only) -USE_LOCAL_WEBVIEW=false -WEBVIEW_DEV_SERVER=http://localhost:3000 diff --git a/workspaces/wi/wi-extension/.gitignore b/workspaces/wi/wi-extension/.gitignore deleted file mode 100644 index 0f42b8afab8..00000000000 --- a/workspaces/wi/wi-extension/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules -out -dist -*.vsix -.vscode-test diff --git a/workspaces/wi/wi-extension/.vscode/launch.json b/workspaces/wi/wi-extension/.vscode/launch.json deleted file mode 100644 index 5c9fcdf5197..00000000000 --- a/workspaces/wi/wi-extension/.vscode/launch.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Run Extension", - "type": "extensionHost", - "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}/workspaces/wi/wi-extension" - ], - "outFiles": [ - "${workspaceFolder}/workspaces/wi/wi-extension/dist/**/*.js" - ], - "preLaunchTask": "${defaultBuildTask}" - }, - { - "name": "Extension Tests", - "type": "extensionHost", - "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}/workspaces/wi/wi-extension", - "--extensionTestsPath=${workspaceFolder}/workspaces/wi/wi-extension/out/test/suite/index" - ], - "outFiles": [ - "${workspaceFolder}/workspaces/wi/wi-extension/out/test/**/*.js" - ], - "preLaunchTask": "npm: compile-tests" - } - ] -} diff --git a/workspaces/wi/wi-extension/.vscode/settings.json b/workspaces/wi/wi-extension/.vscode/settings.json deleted file mode 100644 index b2fbfdb5efb..00000000000 --- a/workspaces/wi/wi-extension/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "editor.formatOnSave": true, - "editor.defaultFormatter": "biomejs.biome", - "typescript.tsdk": "node_modules/typescript/lib" -} diff --git a/workspaces/wi/wi-extension/.vscode/tasks.json b/workspaces/wi/wi-extension/.vscode/tasks.json deleted file mode 100644 index 418deff6b37..00000000000 --- a/workspaces/wi/wi-extension/.vscode/tasks.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "watch", - "path": "workspaces/wi/wi-extension", - "isBackground": true, - "group": { - "kind": "build", - "isDefault": true - }, - "problemMatcher": [ - "$ts-webpack-watch" - ] - }, - { - "type": "npm", - "script": "compile", - "path": "workspaces/wi/wi-extension", - "group": "build", - "problemMatcher": [ - "$tsc" - ] - }, - { - "type": "npm", - "script": "compile-tests", - "path": "workspaces/wi/wi-extension", - "group": "build", - "problemMatcher": [ - "$tsc" - ] - } - ] -} diff --git a/workspaces/wi/wi-extension/.vscodeignore b/workspaces/wi/wi-extension/.vscodeignore deleted file mode 100644 index 9101d9d6d6c..00000000000 --- a/workspaces/wi/wi-extension/.vscodeignore +++ /dev/null @@ -1,2 +0,0 @@ -!dist -.env diff --git a/workspaces/wi/wi-extension/CHANGELOG.md b/workspaces/wi/wi-extension/CHANGELOG.md deleted file mode 100644 index d0e2e03f406..00000000000 --- a/workspaces/wi/wi-extension/CHANGELOG.md +++ /dev/null @@ -1,14 +0,0 @@ -# Changelog - -All notable changes to the "wso2-integrator" extension will be documented in this file. - -## [1.0.0] - 2025-10-21 - -### Added -- Initial release of WSO2 Integrator extension -- Unified sidebar activity bar for BI and MI integrations -- Welcome page with integration status and quick links -- Extension bridge to consume BI and MI extension APIs -- Tree data provider for integration project exploration -- Commands for navigating between BI and MI views -- Automatic detection of installed BI/MI extensions diff --git a/workspaces/wi/wi-extension/LICENSE b/workspaces/wi/wi-extension/LICENSE deleted file mode 100644 index cde30403f90..00000000000 --- a/workspaces/wi/wi-extension/LICENSE +++ /dev/null @@ -1,60 +0,0 @@ -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, -and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by -the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all -other entities that control, are controlled by, or are under common -control with that entity. For the purposes of this definition, -"control" means (i) the power, direct or indirect, to cause the -direction or management of such entity, whether by contract or -otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity -exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, -including but not limited to software source code, documentation -source, and configuration files. - -"Object" form shall mean any form resulting from mechanical -transformation or translation of a Source form, including but -not limited to compiled object code, generated documentation, -and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or -Object form, made available under the License, as indicated by a -copyright notice that is included in or attached to the work -(an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object -form, that is based on (or derived from) the Work and for which the -editorial revisions, annotations, elaborations, or other modifications -represent, as a whole, an original work of authorship. For the purposes -of this License, Derivative Works shall not include works that remain -separable from, or merely link (or bind by name) to the interfaces of, -the Work and Derivative Works thereof. - -Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/workspaces/wi/wi-extension/README.md b/workspaces/wi/wi-extension/README.md deleted file mode 100644 index 5811ba1b766..00000000000 --- a/workspaces/wi/wi-extension/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# WSO2 Integrator Extension - -A unified Visual Studio Code extension for developing WSO2 integration solutions, providing a single activity bar view for both Ballerina Integrator (BI) and Micro Integrator (MI) projects. - -## Features - -- **Unified Integration View**: Access both BI and MI integrations from a single sidebar activity -- **Welcome Dashboard**: Interactive welcome page showing available integration types -- **Seamless Integration**: Works alongside existing BI and MI extensions -- **Quick Navigation**: Easy access to BI and MI project explorer items -- **Extension Bridge**: Automatically detects and integrates with installed BI/MI extensions - -## Requirements - -This extension provides a unified interface for: -- **WSO2 Integrator: BI** (`wso2.ballerina-integrator`) -- **WSO2 Integrator: MI** (`wso2.micro-integrator`) - -Install one or both of these extensions to enable their respective functionality. - -## Installation - -1. Install the WSO2 Integrator extension from the VS Code marketplace -2. Install WSO2 Integrator: BI and/or WSO2 Integrator: MI extensions -3. Open the WSO2 Integrator activity bar icon to get started - -## Usage - -### Welcome Page - -Click on the home icon in the WSO2 Integrator sidebar to open the welcome page, which provides: -- Status of installed BI/MI extensions -- Quick links to open BI or MI integrations -- Documentation and resource links - -### Integration Explorer - -The integration explorer shows: -- Ballerina Integrator (BI) projects (if extension is installed) -- Micro Integrator (MI) projects (if extension is installed) -- Tree view items from respective extensions - -### Commands - -- **WSO2 Integrator: Open Welcome Page** - Open the welcome dashboard -- **WSO2 Integrator: Refresh** - Refresh the integration explorer -- **WSO2 Integrator: Open BI Integration** - Switch to BI extension view -- **WSO2 Integrator: Open MI Integration** - Switch to MI extension view - -## Extension Settings - -This extension works with the settings of the underlying BI and MI extensions. - -## Known Issues - -None at this time. - -## Release Notes - -### 1.0.0 - -Initial release of WSO2 Integrator extension with: -- Unified sidebar view for BI and MI integrations -- Welcome page with integration status -- Extension bridge for BI and MI extensions -- Tree data provider for project exploration - -## Contributing - -We welcome contributions! Please see our [contributing guidelines](CONTRIBUTING.md) for more information. - -## License - -Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) - -Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for details. - -## Support - -- [Documentation](https://wso2.com/integration/) -- [GitHub Issues](https://github.com/wso2/ballerina-plugin-vscode/issues) -- [Community Discord](https://discord.gg/wso2) diff --git a/workspaces/wi/wi-extension/assets/ballerina.svg b/workspaces/wi/wi-extension/assets/ballerina.svg deleted file mode 100644 index 9f7681ed841..00000000000 --- a/workspaces/wi/wi-extension/assets/ballerina.svg +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/bi-logo.svg b/workspaces/wi/wi-extension/assets/bi-logo.svg deleted file mode 100644 index 070bd40b9c0..00000000000 --- a/workspaces/wi/wi-extension/assets/bi-logo.svg +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-APIResource.svg b/workspaces/wi/wi-extension/assets/dark-APIResource.svg deleted file mode 100644 index 448df39dc88..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-APIResource.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-Sequence.svg b/workspaces/wi/wi-extension/assets/dark-Sequence.svg deleted file mode 100644 index 9ed7d58f79f..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-Sequence.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-address-endpoint-template.svg b/workspaces/wi/wi-extension/assets/dark-address-endpoint-template.svg deleted file mode 100644 index 3ec8e957706..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-address-endpoint-template.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-address-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-address-endpoint.svg deleted file mode 100644 index c354fffec38..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-address-endpoint.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-arrow-swap.svg b/workspaces/wi/wi-extension/assets/dark-arrow-swap.svg deleted file mode 100644 index 051a67580dc..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-arrow-swap.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-bi-ai-agent.svg b/workspaces/wi/wi-extension/assets/dark-bi-ai-agent.svg deleted file mode 100644 index b75203cb736..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-ai-agent.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-bi-asb.svg b/workspaces/wi/wi-extension/assets/dark-bi-asb.svg deleted file mode 100644 index 37ef5e0b564..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-asb.svg +++ /dev/null @@ -1,18 +0,0 @@ - - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-bi-config.svg b/workspaces/wi/wi-extension/assets/dark-bi-config.svg deleted file mode 100644 index d12cd2e718a..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-config.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-bi-connection.svg b/workspaces/wi/wi-extension/assets/dark-bi-connection.svg deleted file mode 100644 index 798e6122efe..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-connection.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-bi-file.svg b/workspaces/wi/wi-extension/assets/dark-bi-file.svg deleted file mode 100644 index b6a730a93ad..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-file.svg +++ /dev/null @@ -1,18 +0,0 @@ - - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-bi-ftp.svg b/workspaces/wi/wi-extension/assets/dark-bi-ftp.svg deleted file mode 100644 index 23a335d43d3..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-ftp.svg +++ /dev/null @@ -1,18 +0,0 @@ - - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-bi-function.svg b/workspaces/wi/wi-extension/assets/dark-bi-function.svg deleted file mode 100644 index f5f7a0c0d45..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-function.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-bi-github.svg b/workspaces/wi/wi-extension/assets/dark-bi-github.svg deleted file mode 100644 index 5f64aaf67b4..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-github.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-bi-globe.svg b/workspaces/wi/wi-extension/assets/dark-bi-globe.svg deleted file mode 100644 index 43995c4ae6d..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-globe.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-bi-graphql.svg b/workspaces/wi/wi-extension/assets/dark-bi-graphql.svg deleted file mode 100644 index 3cf318fe05b..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-graphql.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-bi-grpc.svg b/workspaces/wi/wi-extension/assets/dark-bi-grpc.svg deleted file mode 100644 index cfca9ebe624..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-grpc.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-bi-http-service.svg b/workspaces/wi/wi-extension/assets/dark-bi-http-service.svg deleted file mode 100644 index fb3f7601169..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-http-service.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-bi-java.svg b/workspaces/wi/wi-extension/assets/dark-bi-java.svg deleted file mode 100644 index 94c2b837373..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-java.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-bi-kafka.svg b/workspaces/wi/wi-extension/assets/dark-bi-kafka.svg deleted file mode 100644 index 190e06c4b27..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-kafka.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-bi-mqtt.svg b/workspaces/wi/wi-extension/assets/dark-bi-mqtt.svg deleted file mode 100644 index 78287f98006..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-mqtt.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-bi-nats.svg b/workspaces/wi/wi-extension/assets/dark-bi-nats.svg deleted file mode 100644 index 4fab39a8261..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-nats.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-bi-rabbitmq.svg b/workspaces/wi/wi-extension/assets/dark-bi-rabbitmq.svg deleted file mode 100644 index 9fc0f1bcab7..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-rabbitmq.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-bi-salesforce.svg b/workspaces/wi/wi-extension/assets/dark-bi-salesforce.svg deleted file mode 100644 index 3bef27e967e..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-salesforce.svg +++ /dev/null @@ -1,18 +0,0 @@ - - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-bi-task.svg b/workspaces/wi/wi-extension/assets/dark-bi-task.svg deleted file mode 100644 index fd0b96d5eb0..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-task.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-bi-tcp.svg b/workspaces/wi/wi-extension/assets/dark-bi-tcp.svg deleted file mode 100644 index 9379adb7c8f..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-tcp.svg +++ /dev/null @@ -1,18 +0,0 @@ - - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-bi-type.svg b/workspaces/wi/wi-extension/assets/dark-bi-type.svg deleted file mode 100644 index 862db3fa6c9..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-bi-type.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-class-icon.svg b/workspaces/wi/wi-extension/assets/dark-class-icon.svg deleted file mode 100644 index f6fb0482ca0..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-class-icon.svg +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-config.svg b/workspaces/wi/wi-extension/assets/dark-config.svg deleted file mode 100644 index d12cd2e718a..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-config.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-connection.svg b/workspaces/wi/wi-extension/assets/dark-connection.svg deleted file mode 100644 index 798e6122efe..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-connection.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-custom-message-processor.svg b/workspaces/wi/wi-extension/assets/dark-custom-message-processor.svg deleted file mode 100644 index 87de2627f85..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-custom-message-processor.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-custom-message-store.svg b/workspaces/wi/wi-extension/assets/dark-custom-message-store.svg deleted file mode 100644 index 23e5a420335..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-custom-message-store.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-cxf-ws-rm-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-cxf-ws-rm-endpoint.svg deleted file mode 100644 index fca53c2e027..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-cxf-ws-rm-endpoint.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-data-service.svg b/workspaces/wi/wi-extension/assets/dark-data-service.svg deleted file mode 100644 index fdd107b5126..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-data-service.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-data-source.svg b/workspaces/wi/wi-extension/assets/dark-data-source.svg deleted file mode 100644 index 7a1bed9990a..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-data-source.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-dataMapper.svg b/workspaces/wi/wi-extension/assets/dark-dataMapper.svg deleted file mode 100644 index b503f01777c..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-dataMapper.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-database.svg b/workspaces/wi/wi-extension/assets/dark-database.svg deleted file mode 100644 index 6109d72a990..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-database.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-default-endpoint-template.svg b/workspaces/wi/wi-extension/assets/dark-default-endpoint-template.svg deleted file mode 100644 index f334f33d0df..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-default-endpoint-template.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-default-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-default-endpoint.svg deleted file mode 100644 index 70e2a5744da..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-default-endpoint.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-delete-api.svg b/workspaces/wi/wi-extension/assets/dark-delete-api.svg deleted file mode 100644 index 3a5bde808ab..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-delete-api.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-endpoint.svg deleted file mode 100644 index c11cac8e400..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-endpoint.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-failover-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-failover-endpoint.svg deleted file mode 100644 index df84e19a216..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-failover-endpoint.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-feed-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-feed-endpoint.svg deleted file mode 100644 index 7cbf792e972..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-feed-endpoint.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-file-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-file-endpoint.svg deleted file mode 100644 index f6f22dea8ad..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-file-endpoint.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-file.svg b/workspaces/wi/wi-extension/assets/dark-file.svg deleted file mode 100644 index c1da0d556a0..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-fold-down.svg b/workspaces/wi/wi-extension/assets/dark-fold-down.svg deleted file mode 100644 index 44393fb1af5..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-fold-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-function.svg b/workspaces/wi/wi-extension/assets/dark-function.svg deleted file mode 100644 index f5f7a0c0d45..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-function.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-gear.svg b/workspaces/wi/wi-extension/assets/dark-gear.svg deleted file mode 100644 index b3467c84c7c..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-gear.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-get-api.svg b/workspaces/wi/wi-extension/assets/dark-get-api.svg deleted file mode 100644 index d2b111b7fbf..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-get-api.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-globe.svg b/workspaces/wi/wi-extension/assets/dark-globe.svg deleted file mode 100644 index 702f17e98ad..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-globe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-head-api.svg b/workspaces/wi/wi-extension/assets/dark-head-api.svg deleted file mode 100644 index 73327c9395d..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-head-api.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-hl7-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-hl7-endpoint.svg deleted file mode 100644 index 5eb42ec74b1..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-hl7-endpoint.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-http-endpoint-template.svg b/workspaces/wi/wi-extension/assets/dark-http-endpoint-template.svg deleted file mode 100644 index fcde650c0ca..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-http-endpoint-template.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-http-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-http-endpoint.svg deleted file mode 100644 index 648617b389e..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-http-endpoint.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-http-inbound-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-http-inbound-endpoint.svg deleted file mode 100644 index ee7ef65fcae..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-http-inbound-endpoint.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-http-service.svg b/workspaces/wi/wi-extension/assets/dark-http-service.svg deleted file mode 100644 index fb3f7601169..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-http-service.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-https-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-https-endpoint.svg deleted file mode 100644 index 167e6302a21..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-https-endpoint.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-icon.svg b/workspaces/wi/wi-extension/assets/dark-icon.svg deleted file mode 100644 index 9dba7b37e67..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-icon.svg +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-in-memory-message-store.svg b/workspaces/wi/wi-extension/assets/dark-in-memory-message-store.svg deleted file mode 100644 index 43554cd9fec..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-in-memory-message-store.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-inbound-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-inbound-endpoint.svg deleted file mode 100644 index a11ee6b08b7..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-inbound-endpoint.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-jdbc-message-store.svg b/workspaces/wi/wi-extension/assets/dark-jdbc-message-store.svg deleted file mode 100644 index ea76bc16695..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-jdbc-message-store.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-jms-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-jms-endpoint.svg deleted file mode 100644 index 0d5435e824c..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-jms-endpoint.svg +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-jms-message-store.svg b/workspaces/wi/wi-extension/assets/dark-jms-message-store.svg deleted file mode 100644 index 579f4c78ddd..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-jms-message-store.svg +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-kafka-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-kafka-endpoint.svg deleted file mode 100644 index 045eb1b3ce7..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-kafka-endpoint.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-list-ordered.svg b/workspaces/wi/wi-extension/assets/dark-list-ordered.svg deleted file mode 100644 index 8ab2773f39d..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-list-ordered.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-load-balance-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-load-balance-endpoint.svg deleted file mode 100644 index 5c572b5a750..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-load-balance-endpoint.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-local-entry.svg b/workspaces/wi/wi-extension/assets/dark-local-entry.svg deleted file mode 100644 index 6f2f426fbbe..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-local-entry.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-message-processor.svg b/workspaces/wi/wi-extension/assets/dark-message-processor.svg deleted file mode 100644 index b56f06b4454..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-message-processor.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-message-sampling-processor.svg b/workspaces/wi/wi-extension/assets/dark-message-sampling-processor.svg deleted file mode 100644 index 1bd23ef9860..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-message-sampling-processor.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-message-store.svg b/workspaces/wi/wi-extension/assets/dark-message-store.svg deleted file mode 100644 index 4023a385878..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-message-store.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-mqtt-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-mqtt-endpoint.svg deleted file mode 100644 index 9a5754a2426..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-mqtt-endpoint.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-options-api.svg b/workspaces/wi/wi-extension/assets/dark-options-api.svg deleted file mode 100644 index 9d000f3353c..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-options-api.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-patch-api.svg b/workspaces/wi/wi-extension/assets/dark-patch-api.svg deleted file mode 100644 index 8cf8fcdc14b..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-patch-api.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-plug.svg b/workspaces/wi/wi-extension/assets/dark-plug.svg deleted file mode 100644 index 79a529cdde7..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-plug.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-post-api.svg b/workspaces/wi/wi-extension/assets/dark-post-api.svg deleted file mode 100644 index 40e3cd17536..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-post-api.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-project.svg b/workspaces/wi/wi-extension/assets/dark-project.svg deleted file mode 100644 index cbcb68b1f69..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-project.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-put-api.svg b/workspaces/wi/wi-extension/assets/dark-put-api.svg deleted file mode 100644 index b0e77909548..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-put-api.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-rabbit-mq.svg b/workspaces/wi/wi-extension/assets/dark-rabbit-mq.svg deleted file mode 100644 index 54cc8a0a2c6..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-rabbit-mq.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-rabbitmq-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-rabbitmq-endpoint.svg deleted file mode 100644 index 54cc8a0a2c6..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-rabbitmq-endpoint.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-radio.svg b/workspaces/wi/wi-extension/assets/dark-radio.svg deleted file mode 100644 index 2a67dadf799..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-radio.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-recipient-list-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-recipient-list-endpoint.svg deleted file mode 100644 index 7496952fd4e..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-recipient-list-endpoint.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-registry.svg b/workspaces/wi/wi-extension/assets/dark-registry.svg deleted file mode 100644 index 96649b2fe4c..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-registry.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-resequence-message-store.svg b/workspaces/wi/wi-extension/assets/dark-resequence-message-store.svg deleted file mode 100644 index 2efda6f511c..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-resequence-message-store.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-scheduled-failover-message-forwarding-processor.svg b/workspaces/wi/wi-extension/assets/dark-scheduled-failover-message-forwarding-processor.svg deleted file mode 100644 index 95733d9c909..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-scheduled-failover-message-forwarding-processor.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-scheduled-message-forwarding-processor.svg b/workspaces/wi/wi-extension/assets/dark-scheduled-message-forwarding-processor.svg deleted file mode 100644 index 60e2087e1cb..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-scheduled-message-forwarding-processor.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-sequence-template.svg b/workspaces/wi/wi-extension/assets/dark-sequence-template.svg deleted file mode 100644 index becf9ddf4f6..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-sequence-template.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-settings.svg b/workspaces/wi/wi-extension/assets/dark-settings.svg deleted file mode 100644 index 4b0b8768df3..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-settings.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-start.svg b/workspaces/wi/wi-extension/assets/dark-start.svg deleted file mode 100644 index aec16394f90..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-start.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-task.svg b/workspaces/wi/wi-extension/assets/dark-task.svg deleted file mode 100644 index fd0b96d5eb0..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-task.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-tasklist.svg b/workspaces/wi/wi-extension/assets/dark-tasklist.svg deleted file mode 100644 index d793b7f4571..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-tasklist.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-template-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-template-endpoint.svg deleted file mode 100644 index 7aadbe99842..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-template-endpoint.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-template.svg b/workspaces/wi/wi-extension/assets/dark-template.svg deleted file mode 100644 index 3ea7abcb0dd..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-template.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-type-hierarchy.svg b/workspaces/wi/wi-extension/assets/dark-type-hierarchy.svg deleted file mode 100644 index 5711a87dff7..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-type-hierarchy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/dark-type.svg b/workspaces/wi/wi-extension/assets/dark-type.svg deleted file mode 100644 index b110b9af099..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-type.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-user-defined-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-user-defined-endpoint.svg deleted file mode 100644 index b1a1a0949db..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-user-defined-endpoint.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-ws-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-ws-endpoint.svg deleted file mode 100644 index 26eb37f6ac4..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-ws-endpoint.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-wsdl-endpoint-template.svg b/workspaces/wi/wi-extension/assets/dark-wsdl-endpoint-template.svg deleted file mode 100644 index c160e484216..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-wsdl-endpoint-template.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-wsdl-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-wsdl-endpoint.svg deleted file mode 100644 index f258585765e..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-wsdl-endpoint.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-wso2-mb-message-store.svg b/workspaces/wi/wi-extension/assets/dark-wso2-mb-message-store.svg deleted file mode 100644 index 50bd61a2491..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-wso2-mb-message-store.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/dark-wss-endpoint.svg b/workspaces/wi/wi-extension/assets/dark-wss-endpoint.svg deleted file mode 100644 index 81786610a04..00000000000 --- a/workspaces/wi/wi-extension/assets/dark-wss-endpoint.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/icon.svg b/workspaces/wi/wi-extension/assets/icon.svg deleted file mode 100644 index c4b720d5fca..00000000000 --- a/workspaces/wi/wi-extension/assets/icon.svg +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-APIResource.svg b/workspaces/wi/wi-extension/assets/light-APIResource.svg deleted file mode 100644 index a863c8de693..00000000000 --- a/workspaces/wi/wi-extension/assets/light-APIResource.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-Sequence.svg b/workspaces/wi/wi-extension/assets/light-Sequence.svg deleted file mode 100644 index ad516afa96d..00000000000 --- a/workspaces/wi/wi-extension/assets/light-Sequence.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-address-endpoint-template.svg b/workspaces/wi/wi-extension/assets/light-address-endpoint-template.svg deleted file mode 100644 index 192dea80780..00000000000 --- a/workspaces/wi/wi-extension/assets/light-address-endpoint-template.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-address-endpoint.svg b/workspaces/wi/wi-extension/assets/light-address-endpoint.svg deleted file mode 100644 index 3b324e9a56a..00000000000 --- a/workspaces/wi/wi-extension/assets/light-address-endpoint.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-arrow-swap.svg b/workspaces/wi/wi-extension/assets/light-arrow-swap.svg deleted file mode 100644 index e8e8fd4c58e..00000000000 --- a/workspaces/wi/wi-extension/assets/light-arrow-swap.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-bi-ai-agent.svg b/workspaces/wi/wi-extension/assets/light-bi-ai-agent.svg deleted file mode 100644 index 05eb6989f12..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-ai-agent.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-bi-asb.svg b/workspaces/wi/wi-extension/assets/light-bi-asb.svg deleted file mode 100644 index d8b6cfe7d27..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-asb.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-bi-config.svg b/workspaces/wi/wi-extension/assets/light-bi-config.svg deleted file mode 100644 index 9c2f5bbca41..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-config.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-bi-connection.svg b/workspaces/wi/wi-extension/assets/light-bi-connection.svg deleted file mode 100644 index 276ed44a769..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-connection.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-bi-file.svg b/workspaces/wi/wi-extension/assets/light-bi-file.svg deleted file mode 100644 index 46478766aca..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-file.svg +++ /dev/null @@ -1,18 +0,0 @@ - - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-bi-ftp.svg b/workspaces/wi/wi-extension/assets/light-bi-ftp.svg deleted file mode 100644 index 2e46c58bfdd..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-ftp.svg +++ /dev/null @@ -1,18 +0,0 @@ - - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-bi-function.svg b/workspaces/wi/wi-extension/assets/light-bi-function.svg deleted file mode 100644 index db3105510df..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-function.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-bi-github.svg b/workspaces/wi/wi-extension/assets/light-bi-github.svg deleted file mode 100644 index 0ba52caeb30..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-github.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-bi-globe.svg b/workspaces/wi/wi-extension/assets/light-bi-globe.svg deleted file mode 100644 index a01f6e44fc0..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-globe.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-bi-graphql.svg b/workspaces/wi/wi-extension/assets/light-bi-graphql.svg deleted file mode 100644 index 3526cf2fa94..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-graphql.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-bi-grpc.svg b/workspaces/wi/wi-extension/assets/light-bi-grpc.svg deleted file mode 100644 index 26599c1ab65..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-grpc.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-bi-http-service.svg b/workspaces/wi/wi-extension/assets/light-bi-http-service.svg deleted file mode 100644 index c39db2567c5..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-http-service.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-bi-java.svg b/workspaces/wi/wi-extension/assets/light-bi-java.svg deleted file mode 100644 index c2eab60f460..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-java.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-bi-kafka.svg b/workspaces/wi/wi-extension/assets/light-bi-kafka.svg deleted file mode 100644 index 14caae46a03..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-kafka.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-bi-mqtt.svg b/workspaces/wi/wi-extension/assets/light-bi-mqtt.svg deleted file mode 100644 index 8a204e7962b..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-mqtt.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-bi-nats.svg b/workspaces/wi/wi-extension/assets/light-bi-nats.svg deleted file mode 100644 index 384a492f790..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-nats.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-bi-rabbitmq.svg b/workspaces/wi/wi-extension/assets/light-bi-rabbitmq.svg deleted file mode 100644 index 351d0b5f8ff..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-rabbitmq.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-bi-salesforce.svg b/workspaces/wi/wi-extension/assets/light-bi-salesforce.svg deleted file mode 100644 index f6d846ee38f..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-salesforce.svg +++ /dev/null @@ -1,18 +0,0 @@ - - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-bi-task.svg b/workspaces/wi/wi-extension/assets/light-bi-task.svg deleted file mode 100644 index 22390c2dc36..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-task.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-bi-tcp.svg b/workspaces/wi/wi-extension/assets/light-bi-tcp.svg deleted file mode 100644 index 0f7ea674772..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-tcp.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-bi-type.svg b/workspaces/wi/wi-extension/assets/light-bi-type.svg deleted file mode 100644 index 4c5d1f61b2b..00000000000 --- a/workspaces/wi/wi-extension/assets/light-bi-type.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-class-icon.svg b/workspaces/wi/wi-extension/assets/light-class-icon.svg deleted file mode 100644 index ba94d611aef..00000000000 --- a/workspaces/wi/wi-extension/assets/light-class-icon.svg +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-config.svg b/workspaces/wi/wi-extension/assets/light-config.svg deleted file mode 100644 index 9c2f5bbca41..00000000000 --- a/workspaces/wi/wi-extension/assets/light-config.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-connection.svg b/workspaces/wi/wi-extension/assets/light-connection.svg deleted file mode 100644 index 276ed44a769..00000000000 --- a/workspaces/wi/wi-extension/assets/light-connection.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-custom-message-processor.svg b/workspaces/wi/wi-extension/assets/light-custom-message-processor.svg deleted file mode 100644 index 8fa0cb153a5..00000000000 --- a/workspaces/wi/wi-extension/assets/light-custom-message-processor.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-custom-message-store.svg b/workspaces/wi/wi-extension/assets/light-custom-message-store.svg deleted file mode 100644 index 71b636bbdb0..00000000000 --- a/workspaces/wi/wi-extension/assets/light-custom-message-store.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-cxf-ws-rm-endpoint.svg b/workspaces/wi/wi-extension/assets/light-cxf-ws-rm-endpoint.svg deleted file mode 100644 index 22dd4479403..00000000000 --- a/workspaces/wi/wi-extension/assets/light-cxf-ws-rm-endpoint.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-data-service.svg b/workspaces/wi/wi-extension/assets/light-data-service.svg deleted file mode 100644 index b3b64fe627b..00000000000 --- a/workspaces/wi/wi-extension/assets/light-data-service.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-data-source.svg b/workspaces/wi/wi-extension/assets/light-data-source.svg deleted file mode 100644 index 06bcc15e4af..00000000000 --- a/workspaces/wi/wi-extension/assets/light-data-source.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-dataMapper.svg b/workspaces/wi/wi-extension/assets/light-dataMapper.svg deleted file mode 100644 index 09ed86b5a24..00000000000 --- a/workspaces/wi/wi-extension/assets/light-dataMapper.svg +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-database.svg b/workspaces/wi/wi-extension/assets/light-database.svg deleted file mode 100644 index 9279174fcf8..00000000000 --- a/workspaces/wi/wi-extension/assets/light-database.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-default-endpoint-template.svg b/workspaces/wi/wi-extension/assets/light-default-endpoint-template.svg deleted file mode 100644 index 90514a7388c..00000000000 --- a/workspaces/wi/wi-extension/assets/light-default-endpoint-template.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-default-endpoint.svg b/workspaces/wi/wi-extension/assets/light-default-endpoint.svg deleted file mode 100644 index e5ff8f645f4..00000000000 --- a/workspaces/wi/wi-extension/assets/light-default-endpoint.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-delete-api.svg b/workspaces/wi/wi-extension/assets/light-delete-api.svg deleted file mode 100644 index 3a5bde808ab..00000000000 --- a/workspaces/wi/wi-extension/assets/light-delete-api.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-endpoint.svg b/workspaces/wi/wi-extension/assets/light-endpoint.svg deleted file mode 100644 index 503cb4e90f8..00000000000 --- a/workspaces/wi/wi-extension/assets/light-endpoint.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-failover-endpoint.svg b/workspaces/wi/wi-extension/assets/light-failover-endpoint.svg deleted file mode 100644 index 3ecfd61be0f..00000000000 --- a/workspaces/wi/wi-extension/assets/light-failover-endpoint.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-feed-endpoint.svg b/workspaces/wi/wi-extension/assets/light-feed-endpoint.svg deleted file mode 100644 index b8b3df99349..00000000000 --- a/workspaces/wi/wi-extension/assets/light-feed-endpoint.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-file-endpoint.svg b/workspaces/wi/wi-extension/assets/light-file-endpoint.svg deleted file mode 100644 index e17e064e21e..00000000000 --- a/workspaces/wi/wi-extension/assets/light-file-endpoint.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-file.svg b/workspaces/wi/wi-extension/assets/light-file.svg deleted file mode 100644 index 34d7df6cb04..00000000000 --- a/workspaces/wi/wi-extension/assets/light-file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-fold-down.svg b/workspaces/wi/wi-extension/assets/light-fold-down.svg deleted file mode 100644 index 0f4395702dc..00000000000 --- a/workspaces/wi/wi-extension/assets/light-fold-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-function.svg b/workspaces/wi/wi-extension/assets/light-function.svg deleted file mode 100644 index db3105510df..00000000000 --- a/workspaces/wi/wi-extension/assets/light-function.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-gear.svg b/workspaces/wi/wi-extension/assets/light-gear.svg deleted file mode 100644 index 6ebe8311d7d..00000000000 --- a/workspaces/wi/wi-extension/assets/light-gear.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-get-api.svg b/workspaces/wi/wi-extension/assets/light-get-api.svg deleted file mode 100644 index d2b111b7fbf..00000000000 --- a/workspaces/wi/wi-extension/assets/light-get-api.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-globe.svg b/workspaces/wi/wi-extension/assets/light-globe.svg deleted file mode 100644 index 31b5e39e19f..00000000000 --- a/workspaces/wi/wi-extension/assets/light-globe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-head-api.svg b/workspaces/wi/wi-extension/assets/light-head-api.svg deleted file mode 100644 index 73327c9395d..00000000000 --- a/workspaces/wi/wi-extension/assets/light-head-api.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-hl7-endpoint.svg b/workspaces/wi/wi-extension/assets/light-hl7-endpoint.svg deleted file mode 100644 index 6a9be6b52e2..00000000000 --- a/workspaces/wi/wi-extension/assets/light-hl7-endpoint.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-http-endpoint-template.svg b/workspaces/wi/wi-extension/assets/light-http-endpoint-template.svg deleted file mode 100644 index 70b4bc07961..00000000000 --- a/workspaces/wi/wi-extension/assets/light-http-endpoint-template.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-http-endpoint.svg b/workspaces/wi/wi-extension/assets/light-http-endpoint.svg deleted file mode 100644 index e1c78516b60..00000000000 --- a/workspaces/wi/wi-extension/assets/light-http-endpoint.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-http-inbound-endpoint.svg b/workspaces/wi/wi-extension/assets/light-http-inbound-endpoint.svg deleted file mode 100644 index 6a824a9213b..00000000000 --- a/workspaces/wi/wi-extension/assets/light-http-inbound-endpoint.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-http-service.svg b/workspaces/wi/wi-extension/assets/light-http-service.svg deleted file mode 100644 index c39db2567c5..00000000000 --- a/workspaces/wi/wi-extension/assets/light-http-service.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-https-endpoint.svg b/workspaces/wi/wi-extension/assets/light-https-endpoint.svg deleted file mode 100644 index 1f7eefb919d..00000000000 --- a/workspaces/wi/wi-extension/assets/light-https-endpoint.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-icon.svg b/workspaces/wi/wi-extension/assets/light-icon.svg deleted file mode 100644 index c4b720d5fca..00000000000 --- a/workspaces/wi/wi-extension/assets/light-icon.svg +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-in-memory-message-store.svg b/workspaces/wi/wi-extension/assets/light-in-memory-message-store.svg deleted file mode 100644 index 6018b0413cc..00000000000 --- a/workspaces/wi/wi-extension/assets/light-in-memory-message-store.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-inbound-endpoint.svg b/workspaces/wi/wi-extension/assets/light-inbound-endpoint.svg deleted file mode 100644 index 08372c2764e..00000000000 --- a/workspaces/wi/wi-extension/assets/light-inbound-endpoint.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-jdbc-message-store.svg b/workspaces/wi/wi-extension/assets/light-jdbc-message-store.svg deleted file mode 100644 index 29887ddff4f..00000000000 --- a/workspaces/wi/wi-extension/assets/light-jdbc-message-store.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-jms-endpoint.svg b/workspaces/wi/wi-extension/assets/light-jms-endpoint.svg deleted file mode 100644 index cce222b2135..00000000000 --- a/workspaces/wi/wi-extension/assets/light-jms-endpoint.svg +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-jms-message-store.svg b/workspaces/wi/wi-extension/assets/light-jms-message-store.svg deleted file mode 100644 index 209d1820cf7..00000000000 --- a/workspaces/wi/wi-extension/assets/light-jms-message-store.svg +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-kafka-endpoint.svg b/workspaces/wi/wi-extension/assets/light-kafka-endpoint.svg deleted file mode 100644 index 9f49c1ac39f..00000000000 --- a/workspaces/wi/wi-extension/assets/light-kafka-endpoint.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-list-ordered.svg b/workspaces/wi/wi-extension/assets/light-list-ordered.svg deleted file mode 100644 index 625bb418df3..00000000000 --- a/workspaces/wi/wi-extension/assets/light-list-ordered.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-load-balance-endpoint.svg b/workspaces/wi/wi-extension/assets/light-load-balance-endpoint.svg deleted file mode 100644 index 704c3da1941..00000000000 --- a/workspaces/wi/wi-extension/assets/light-load-balance-endpoint.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-local-entry.svg b/workspaces/wi/wi-extension/assets/light-local-entry.svg deleted file mode 100644 index b4d25504516..00000000000 --- a/workspaces/wi/wi-extension/assets/light-local-entry.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-message-processor.svg b/workspaces/wi/wi-extension/assets/light-message-processor.svg deleted file mode 100644 index b4245701e60..00000000000 --- a/workspaces/wi/wi-extension/assets/light-message-processor.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-message-sampling-processor.svg b/workspaces/wi/wi-extension/assets/light-message-sampling-processor.svg deleted file mode 100644 index 1b4947ef30a..00000000000 --- a/workspaces/wi/wi-extension/assets/light-message-sampling-processor.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-message-store.svg b/workspaces/wi/wi-extension/assets/light-message-store.svg deleted file mode 100644 index 00dfb7914b3..00000000000 --- a/workspaces/wi/wi-extension/assets/light-message-store.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-mqtt-endpoint.svg b/workspaces/wi/wi-extension/assets/light-mqtt-endpoint.svg deleted file mode 100644 index 3dedfffc941..00000000000 --- a/workspaces/wi/wi-extension/assets/light-mqtt-endpoint.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-options-api.svg b/workspaces/wi/wi-extension/assets/light-options-api.svg deleted file mode 100644 index 9d000f3353c..00000000000 --- a/workspaces/wi/wi-extension/assets/light-options-api.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-patch-api.svg b/workspaces/wi/wi-extension/assets/light-patch-api.svg deleted file mode 100644 index 8cf8fcdc14b..00000000000 --- a/workspaces/wi/wi-extension/assets/light-patch-api.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-plug.svg b/workspaces/wi/wi-extension/assets/light-plug.svg deleted file mode 100644 index 965d1bd21f0..00000000000 --- a/workspaces/wi/wi-extension/assets/light-plug.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-post-api.svg b/workspaces/wi/wi-extension/assets/light-post-api.svg deleted file mode 100644 index 40e3cd17536..00000000000 --- a/workspaces/wi/wi-extension/assets/light-post-api.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-project.svg b/workspaces/wi/wi-extension/assets/light-project.svg deleted file mode 100644 index f679f31f39c..00000000000 --- a/workspaces/wi/wi-extension/assets/light-project.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-put-api.svg b/workspaces/wi/wi-extension/assets/light-put-api.svg deleted file mode 100644 index b0e77909548..00000000000 --- a/workspaces/wi/wi-extension/assets/light-put-api.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-rabbit-mq.svg b/workspaces/wi/wi-extension/assets/light-rabbit-mq.svg deleted file mode 100644 index 8e12e947233..00000000000 --- a/workspaces/wi/wi-extension/assets/light-rabbit-mq.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-rabbitmq-endpoint.svg b/workspaces/wi/wi-extension/assets/light-rabbitmq-endpoint.svg deleted file mode 100644 index 8e12e947233..00000000000 --- a/workspaces/wi/wi-extension/assets/light-rabbitmq-endpoint.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-radio.svg b/workspaces/wi/wi-extension/assets/light-radio.svg deleted file mode 100644 index ca911870186..00000000000 --- a/workspaces/wi/wi-extension/assets/light-radio.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-recipient-list-endpoint.svg b/workspaces/wi/wi-extension/assets/light-recipient-list-endpoint.svg deleted file mode 100644 index 169b8911eb0..00000000000 --- a/workspaces/wi/wi-extension/assets/light-recipient-list-endpoint.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-registry.svg b/workspaces/wi/wi-extension/assets/light-registry.svg deleted file mode 100644 index 28a225fa0e0..00000000000 --- a/workspaces/wi/wi-extension/assets/light-registry.svg +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-resequence-message-store.svg b/workspaces/wi/wi-extension/assets/light-resequence-message-store.svg deleted file mode 100644 index 4752d9da266..00000000000 --- a/workspaces/wi/wi-extension/assets/light-resequence-message-store.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-scheduled-failover-message-forwarding-processor.svg b/workspaces/wi/wi-extension/assets/light-scheduled-failover-message-forwarding-processor.svg deleted file mode 100644 index da1cb984923..00000000000 --- a/workspaces/wi/wi-extension/assets/light-scheduled-failover-message-forwarding-processor.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-scheduled-message-forwarding-processor.svg b/workspaces/wi/wi-extension/assets/light-scheduled-message-forwarding-processor.svg deleted file mode 100644 index 945212ceb28..00000000000 --- a/workspaces/wi/wi-extension/assets/light-scheduled-message-forwarding-processor.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-sequence-template.svg b/workspaces/wi/wi-extension/assets/light-sequence-template.svg deleted file mode 100644 index 04664ac093c..00000000000 --- a/workspaces/wi/wi-extension/assets/light-sequence-template.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-settings.svg b/workspaces/wi/wi-extension/assets/light-settings.svg deleted file mode 100644 index 43c88712079..00000000000 --- a/workspaces/wi/wi-extension/assets/light-settings.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-start.svg b/workspaces/wi/wi-extension/assets/light-start.svg deleted file mode 100644 index 0df9c2f1c0e..00000000000 --- a/workspaces/wi/wi-extension/assets/light-start.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-task.svg b/workspaces/wi/wi-extension/assets/light-task.svg deleted file mode 100644 index 22390c2dc36..00000000000 --- a/workspaces/wi/wi-extension/assets/light-task.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-tasklist.svg b/workspaces/wi/wi-extension/assets/light-tasklist.svg deleted file mode 100644 index 640f0a5baf5..00000000000 --- a/workspaces/wi/wi-extension/assets/light-tasklist.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-template-endpoint.svg b/workspaces/wi/wi-extension/assets/light-template-endpoint.svg deleted file mode 100644 index 2387e859e2c..00000000000 --- a/workspaces/wi/wi-extension/assets/light-template-endpoint.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-template.svg b/workspaces/wi/wi-extension/assets/light-template.svg deleted file mode 100644 index edc703d2c8e..00000000000 --- a/workspaces/wi/wi-extension/assets/light-template.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-type-hierarchy.svg b/workspaces/wi/wi-extension/assets/light-type-hierarchy.svg deleted file mode 100644 index 937e1724c15..00000000000 --- a/workspaces/wi/wi-extension/assets/light-type-hierarchy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/assets/light-type.svg b/workspaces/wi/wi-extension/assets/light-type.svg deleted file mode 100644 index 66d8088015d..00000000000 --- a/workspaces/wi/wi-extension/assets/light-type.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - diff --git a/workspaces/wi/wi-extension/assets/light-user-defined-endpoint.svg b/workspaces/wi/wi-extension/assets/light-user-defined-endpoint.svg deleted file mode 100644 index e18996d9d43..00000000000 --- a/workspaces/wi/wi-extension/assets/light-user-defined-endpoint.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-ws-endpoint.svg b/workspaces/wi/wi-extension/assets/light-ws-endpoint.svg deleted file mode 100644 index 5e074d2ce96..00000000000 --- a/workspaces/wi/wi-extension/assets/light-ws-endpoint.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-wsdl-endpoint-template.svg b/workspaces/wi/wi-extension/assets/light-wsdl-endpoint-template.svg deleted file mode 100644 index d77a30f3125..00000000000 --- a/workspaces/wi/wi-extension/assets/light-wsdl-endpoint-template.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-wsdl-endpoint.svg b/workspaces/wi/wi-extension/assets/light-wsdl-endpoint.svg deleted file mode 100644 index 8fb271bf273..00000000000 --- a/workspaces/wi/wi-extension/assets/light-wsdl-endpoint.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-wso2-mb-message-store.svg b/workspaces/wi/wi-extension/assets/light-wso2-mb-message-store.svg deleted file mode 100644 index d9aec3059df..00000000000 --- a/workspaces/wi/wi-extension/assets/light-wso2-mb-message-store.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/workspaces/wi/wi-extension/assets/light-wss-endpoint.svg b/workspaces/wi/wi-extension/assets/light-wss-endpoint.svg deleted file mode 100644 index 52b3b630854..00000000000 --- a/workspaces/wi/wi-extension/assets/light-wss-endpoint.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/workspaces/wi/wi-extension/biome.json b/workspaces/wi/wi-extension/biome.json deleted file mode 100644 index bcec3347ac9..00000000000 --- a/workspaces/wi/wi-extension/biome.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", - "vcs": { - "enabled": false, - "clientKind": "git", - "useIgnoreFile": false - }, - "files": { - "ignoreUnknown": false, - "ignore": [] - }, - "formatter": { - "enabled": true, - "indentStyle": "tab" - }, - "organizeImports": { - "enabled": true - }, - "linter": { - "enabled": true, - "rules": { - "recommended": false - } - }, - "javascript": { - "formatter": { - "quoteStyle": "double" - } - } -} diff --git a/workspaces/wi/wi-extension/config/rush-project.json b/workspaces/wi/wi-extension/config/rush-project.json deleted file mode 100644 index 3c3241c8f6a..00000000000 --- a/workspaces/wi/wi-extension/config/rush-project.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../../rush-config.json" -} diff --git a/workspaces/wi/wi-extension/package.json b/workspaces/wi/wi-extension/package.json deleted file mode 100644 index e1dd4c6d778..00000000000 --- a/workspaces/wi/wi-extension/package.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "name": "wso2-integrator", - "displayName": "WSO2 Integrator", - "description": "Unified integration development environment for WSO2 BI and MI in VS Code", - "version": "1.0.0", - "publisher": "wso2", - "icon": "resources/icons/wso2-integrator-logo.png", - "license": "Apache-2.0", - "repository": { - "url": "https://github.com/wso2/vscode-extensions" - }, - "engines": { - "vscode": "^1.100.0" - }, - "categories": [ - "Other" - ], - "activationEvents": [ - "onStartupFinished" - ], - "extensionDependencies": [ - "wso2.ballerina", - "wso2.micro-integrator" - ], - "main": "./dist/extension.js", - "contributes": { - "configuration": { - "type": "object", - "title": "WSO2 Integrator", - "properties": { - "integrator.defaultIntegrator": { - "type": "string", - "default": "WSO2: BI", - "scope": "resource", - "description": "Choose the default integrator for the lowcode experience.", - "enum": [ - "WSO2: BI", - "WSO2: MI" - ] - } - } - }, - "viewsContainers": { - "activitybar": [ - { - "id": "wso2-integrator", - "title": "WSO2 Integrator", - "icon": "resources/icons/integrator-icon.svg" - } - ] - }, - "views": { - "wso2-integrator": [ - { - "id": "wso2-integrator.explorer", - "name": "Integrations", - "contextualTitle": "WSO2 Integrator" - } - ] - }, - "viewsWelcome": [ - { - "view": "wso2-integrator.explorer", - "contents": "" - } - ], - "commands": [ - { - "command": "wso2.integrator.openWelcome", - "title": "Open Welcome Page", - "category": "WSO2 Integrator", - "icon": "$(home)" - }, - { - "command": "wso2.integrator.refreshView", - "title": "Refresh", - "category": "WSO2 Integrator", - "icon": "$(refresh)" - }, - { - "command": "wso2.integrator.openBIIntegration", - "title": "Open BI Integration", - "category": "WSO2 Integrator" - }, - { - "command": "wso2.integrator.openMIIntegration", - "title": "Open MI Integration", - "category": "WSO2 Integrator" - } - ], - "menus": { - "view/item/context": [ - { - "command": "ballerina.showVisualizer", - "when": "view == wso2-integrator.explorer && viewItem == bi-project", - "group": "inline" - }, - { - "command": "ballerina.force.update.artifacts", - "when": "view == wso2-integrator.explorer && viewItem == bi-project", - "group": "inline" - }, - { - "command": "BI.project-explorer.add-connection", - "when": "view == wso2-integrator.explorer && viewItem == connections", - "group": "inline" - }, - { - "command": "BI.project-explorer.delete", - "when": "view == wso2-integrator.explorer && viewItem == CONNECTION || viewItem == SERVICE || viewItem == FUNCTION || viewItem == AUTOMATION || viewItem == TYPE || viewItem == CONFIGURABLE || viewItem == DATA_MAPPER || viewItem == NP_FUNCTION || viewItem == localConnector", - "group": "inline" - }, - { - "command": "BI.project-explorer.add-entry-point", - "when": "view == wso2-integrator.explorer && viewItem == entryPoint", - "group": "inline" - }, - { - "command": "BI.project-explorer.add-type", - "when": "view == wso2-integrator.explorer && viewItem == types", - "group": "inline" - }, - { - "command": "BI.project-explorer.view-type-diagram", - "when": "view == wso2-integrator.explorer && viewItem == types", - "group": "inline" - }, - { - "command": "BI.project-explorer.add-function", - "when": "view == wso2-integrator.explorer && viewItem == functions", - "group": "inline" - }, - { - "command": "BI.project-explorer.add-configuration", - "when": "view == wso2-integrator.explorer && viewItem == configurations", - "group": "inline" - }, - { - "command": "BI.project-explorer.view-configuration", - "when": "view == wso2-integrator.explorer && viewItem == configurations", - "group": "inline" - }, - { - "command": "BI.project-explorer.add-data-mapper", - "when": "view == wso2-integrator.explorer && viewItem == dataMappers", - "group": "inline" - }, - { - "command": "BI.project-explorer.add-natural-function", - "when": "view == wso2-integrator.explorer && viewItem == naturalFunctions", - "group": "inline" - }, - { - "command": "BI.project-explorer.add-custom-connector", - "when": "view == wso2-integrator.explorer && viewItem == localConnectors", - "group": "inline" - } - ], - "view/title": [ - { - "command": "wso2.integrator.refreshView", - "when": "view == wso2-integrator.explorer", - "group": "navigation@2" - }, - { - "command": "BI.project-explorer.switch-project", - "when": "view == wso2-integrator.explorer && BI.isMultiRoot == true", - "group": "navigation" - }, - { - "command": "BI.project-explorer.add", - "when": "view == wso2-integrator.explorer && BI.project == true", - "group": "navigation" - }, - { - "command": "BI.project-explorer.overview", - "when": "view == wso2-integrator.explorer && BI.project == true", - "group": "navigation" - } - ] - } - }, - "scripts": { - "lint": "biome check .", - "lint:fix": "biome check --write .", - "vscode:prepublish": "npm run copyJSLibs", - "build": "npm run compile && npm run package", - "copyJSLibs": "copyfiles -f ../wi-webviews/lib/main.js resources/jslibs", - "watch": "tsc -p . -w", - "compile": "tsc -p ./", - "compile-tests": "tsc -p . --outDir out", - "test": "node ./out/test/runTest.js", - "package": "node ../../common-libs/scripts/package-vsix.js" - - }, - "devDependencies": { - "@vscode/vsce": "^3.4.0", - "@types/vscode": "^1.100.0", - "@types/mocha": "^10.0.3", - "@types/node": "22.15.18", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^8.32.1", - "@vscode/test-electron": "^2.5.2", - "eslint": "^8.57.1", - "glob": "^11.0.2", - "mocha": "^11.2.2", - "typescript": "5.8.3", - "copyfiles": "^2.4.1", - "copy-webpack-plugin": "^13.0.0", - "source-map-support": "^0.5.21", - "ts-loader": "^9.5.2", - "webpack": "^5.99.8", - "webpack-cli": "^6.0.1", - "webpack-permissions-plugin": "^1.0.9", - "@playwright/test": "~1.55.1", - "@wso2/playwright-vscode-tester": "workspace:*" - }, - "dependencies": { - "@wso2/wi-core": "workspace:*", - "vscode-messenger": "~0.5.1", - "@wso2/ballerina-core": "workspace:*", - "@wso2/font-wso2-vscode": "workspace:*", - "xstate": "~4.38.3", - "@emotion/styled": "^11.14.0", - "@wso2/ui-toolkit": "workspace:*", - "unzipper": "~0.12.3", - "@types/unzipper": "~0.10.11", - "axios": "~1.13.2" - } -} \ No newline at end of file diff --git a/workspaces/wi/wi-extension/resources/codicons/codicon.css b/workspaces/wi/wi-extension/resources/codicons/codicon.css deleted file mode 100644 index 404f5e10316..00000000000 --- a/workspaces/wi/wi-extension/resources/codicons/codicon.css +++ /dev/null @@ -1,571 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -@font-face { - font-family: "codicon"; - font-display: block; - src: url("./codicon.ttf?0e5b0adf625a37fbcd638d31f0fe72aa") format("truetype"); -} - -.codicon[class*='codicon-'] { - font: normal normal normal 16px/1 codicon; - display: inline-block; - text-decoration: none; - text-rendering: auto; - text-align: center; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - user-select: none; - -webkit-user-select: none; - -ms-user-select: none; -} - -/*--------------------- - * Modifiers - *-------------------*/ - -@keyframes codicon-spin { - 100% { - transform:rotate(360deg); - } -} - -.codicon-sync.codicon-modifier-spin, -.codicon-loading.codicon-modifier-spin, -.codicon-gear.codicon-modifier-spin { - /* Use steps to throttle FPS to reduce CPU usage */ - animation: codicon-spin 1.5s steps(30) infinite; -} - -.codicon-modifier-disabled { - opacity: 0.5; -} - -.codicon-modifier-hidden { - opacity: 0; -} - -/* custom speed & easing for loading icon */ -.codicon-loading { - animation-duration: 1s !important; - animation-timing-function: cubic-bezier(0.53, 0.21, 0.29, 0.67) !important; -} - -/*--------------------- - * Icons - *-------------------*/ - -.codicon-add:before { content: "\ea60" } -.codicon-plus:before { content: "\ea60" } -.codicon-gist-new:before { content: "\ea60" } -.codicon-repo-create:before { content: "\ea60" } -.codicon-lightbulb:before { content: "\ea61" } -.codicon-light-bulb:before { content: "\ea61" } -.codicon-repo:before { content: "\ea62" } -.codicon-repo-delete:before { content: "\ea62" } -.codicon-gist-fork:before { content: "\ea63" } -.codicon-repo-forked:before { content: "\ea63" } -.codicon-git-pull-request:before { content: "\ea64" } -.codicon-git-pull-request-abandoned:before { content: "\ea64" } -.codicon-record-keys:before { content: "\ea65" } -.codicon-keyboard:before { content: "\ea65" } -.codicon-tag:before { content: "\ea66" } -.codicon-tag-add:before { content: "\ea66" } -.codicon-tag-remove:before { content: "\ea66" } -.codicon-person:before { content: "\ea67" } -.codicon-person-follow:before { content: "\ea67" } -.codicon-person-outline:before { content: "\ea67" } -.codicon-person-filled:before { content: "\ea67" } -.codicon-git-branch:before { content: "\ea68" } -.codicon-git-branch-create:before { content: "\ea68" } -.codicon-git-branch-delete:before { content: "\ea68" } -.codicon-source-control:before { content: "\ea68" } -.codicon-mirror:before { content: "\ea69" } -.codicon-mirror-public:before { content: "\ea69" } -.codicon-star:before { content: "\ea6a" } -.codicon-star-add:before { content: "\ea6a" } -.codicon-star-delete:before { content: "\ea6a" } -.codicon-star-empty:before { content: "\ea6a" } -.codicon-comment:before { content: "\ea6b" } -.codicon-comment-add:before { content: "\ea6b" } -.codicon-alert:before { content: "\ea6c" } -.codicon-warning:before { content: "\ea6c" } -.codicon-search:before { content: "\ea6d" } -.codicon-search-save:before { content: "\ea6d" } -.codicon-log-out:before { content: "\ea6e" } -.codicon-sign-out:before { content: "\ea6e" } -.codicon-log-in:before { content: "\ea6f" } -.codicon-sign-in:before { content: "\ea6f" } -.codicon-eye:before { content: "\ea70" } -.codicon-eye-unwatch:before { content: "\ea70" } -.codicon-eye-watch:before { content: "\ea70" } -.codicon-circle-filled:before { content: "\ea71" } -.codicon-primitive-dot:before { content: "\ea71" } -.codicon-close-dirty:before { content: "\ea71" } -.codicon-debug-breakpoint:before { content: "\ea71" } -.codicon-debug-breakpoint-disabled:before { content: "\ea71" } -.codicon-debug-hint:before { content: "\ea71" } -.codicon-primitive-square:before { content: "\ea72" } -.codicon-edit:before { content: "\ea73" } -.codicon-pencil:before { content: "\ea73" } -.codicon-info:before { content: "\ea74" } -.codicon-issue-opened:before { content: "\ea74" } -.codicon-gist-private:before { content: "\ea75" } -.codicon-git-fork-private:before { content: "\ea75" } -.codicon-lock:before { content: "\ea75" } -.codicon-mirror-private:before { content: "\ea75" } -.codicon-close:before { content: "\ea76" } -.codicon-remove-close:before { content: "\ea76" } -.codicon-x:before { content: "\ea76" } -.codicon-repo-sync:before { content: "\ea77" } -.codicon-sync:before { content: "\ea77" } -.codicon-clone:before { content: "\ea78" } -.codicon-desktop-download:before { content: "\ea78" } -.codicon-beaker:before { content: "\ea79" } -.codicon-microscope:before { content: "\ea79" } -.codicon-vm:before { content: "\ea7a" } -.codicon-device-desktop:before { content: "\ea7a" } -.codicon-file:before { content: "\ea7b" } -.codicon-file-text:before { content: "\ea7b" } -.codicon-more:before { content: "\ea7c" } -.codicon-ellipsis:before { content: "\ea7c" } -.codicon-kebab-horizontal:before { content: "\ea7c" } -.codicon-mail-reply:before { content: "\ea7d" } -.codicon-reply:before { content: "\ea7d" } -.codicon-organization:before { content: "\ea7e" } -.codicon-organization-filled:before { content: "\ea7e" } -.codicon-organization-outline:before { content: "\ea7e" } -.codicon-new-file:before { content: "\ea7f" } -.codicon-file-add:before { content: "\ea7f" } -.codicon-new-folder:before { content: "\ea80" } -.codicon-file-directory-create:before { content: "\ea80" } -.codicon-trash:before { content: "\ea81" } -.codicon-trashcan:before { content: "\ea81" } -.codicon-history:before { content: "\ea82" } -.codicon-clock:before { content: "\ea82" } -.codicon-folder:before { content: "\ea83" } -.codicon-file-directory:before { content: "\ea83" } -.codicon-symbol-folder:before { content: "\ea83" } -.codicon-logo-github:before { content: "\ea84" } -.codicon-mark-github:before { content: "\ea84" } -.codicon-github:before { content: "\ea84" } -.codicon-terminal:before { content: "\ea85" } -.codicon-console:before { content: "\ea85" } -.codicon-repl:before { content: "\ea85" } -.codicon-zap:before { content: "\ea86" } -.codicon-symbol-event:before { content: "\ea86" } -.codicon-error:before { content: "\ea87" } -.codicon-stop:before { content: "\ea87" } -.codicon-variable:before { content: "\ea88" } -.codicon-symbol-variable:before { content: "\ea88" } -.codicon-array:before { content: "\ea8a" } -.codicon-symbol-array:before { content: "\ea8a" } -.codicon-symbol-module:before { content: "\ea8b" } -.codicon-symbol-package:before { content: "\ea8b" } -.codicon-symbol-namespace:before { content: "\ea8b" } -.codicon-symbol-object:before { content: "\ea8b" } -.codicon-symbol-method:before { content: "\ea8c" } -.codicon-symbol-function:before { content: "\ea8c" } -.codicon-symbol-constructor:before { content: "\ea8c" } -.codicon-symbol-boolean:before { content: "\ea8f" } -.codicon-symbol-null:before { content: "\ea8f" } -.codicon-symbol-numeric:before { content: "\ea90" } -.codicon-symbol-number:before { content: "\ea90" } -.codicon-symbol-structure:before { content: "\ea91" } -.codicon-symbol-struct:before { content: "\ea91" } -.codicon-symbol-parameter:before { content: "\ea92" } -.codicon-symbol-type-parameter:before { content: "\ea92" } -.codicon-symbol-key:before { content: "\ea93" } -.codicon-symbol-text:before { content: "\ea93" } -.codicon-symbol-reference:before { content: "\ea94" } -.codicon-go-to-file:before { content: "\ea94" } -.codicon-symbol-enum:before { content: "\ea95" } -.codicon-symbol-value:before { content: "\ea95" } -.codicon-symbol-ruler:before { content: "\ea96" } -.codicon-symbol-unit:before { content: "\ea96" } -.codicon-activate-breakpoints:before { content: "\ea97" } -.codicon-archive:before { content: "\ea98" } -.codicon-arrow-both:before { content: "\ea99" } -.codicon-arrow-down:before { content: "\ea9a" } -.codicon-arrow-left:before { content: "\ea9b" } -.codicon-arrow-right:before { content: "\ea9c" } -.codicon-arrow-small-down:before { content: "\ea9d" } -.codicon-arrow-small-left:before { content: "\ea9e" } -.codicon-arrow-small-right:before { content: "\ea9f" } -.codicon-arrow-small-up:before { content: "\eaa0" } -.codicon-arrow-up:before { content: "\eaa1" } -.codicon-bell:before { content: "\eaa2" } -.codicon-bold:before { content: "\eaa3" } -.codicon-book:before { content: "\eaa4" } -.codicon-bookmark:before { content: "\eaa5" } -.codicon-debug-breakpoint-conditional-unverified:before { content: "\eaa6" } -.codicon-debug-breakpoint-conditional:before { content: "\eaa7" } -.codicon-debug-breakpoint-conditional-disabled:before { content: "\eaa7" } -.codicon-debug-breakpoint-data-unverified:before { content: "\eaa8" } -.codicon-debug-breakpoint-data:before { content: "\eaa9" } -.codicon-debug-breakpoint-data-disabled:before { content: "\eaa9" } -.codicon-debug-breakpoint-log-unverified:before { content: "\eaaa" } -.codicon-debug-breakpoint-log:before { content: "\eaab" } -.codicon-debug-breakpoint-log-disabled:before { content: "\eaab" } -.codicon-briefcase:before { content: "\eaac" } -.codicon-broadcast:before { content: "\eaad" } -.codicon-browser:before { content: "\eaae" } -.codicon-bug:before { content: "\eaaf" } -.codicon-calendar:before { content: "\eab0" } -.codicon-case-sensitive:before { content: "\eab1" } -.codicon-check:before { content: "\eab2" } -.codicon-checklist:before { content: "\eab3" } -.codicon-chevron-down:before { content: "\eab4" } -.codicon-chevron-left:before { content: "\eab5" } -.codicon-chevron-right:before { content: "\eab6" } -.codicon-chevron-up:before { content: "\eab7" } -.codicon-chrome-close:before { content: "\eab8" } -.codicon-chrome-maximize:before { content: "\eab9" } -.codicon-chrome-minimize:before { content: "\eaba" } -.codicon-chrome-restore:before { content: "\eabb" } -.codicon-circle-outline:before { content: "\eabc" } -.codicon-debug-breakpoint-unverified:before { content: "\eabc" } -.codicon-circle-slash:before { content: "\eabd" } -.codicon-circuit-board:before { content: "\eabe" } -.codicon-clear-all:before { content: "\eabf" } -.codicon-clippy:before { content: "\eac0" } -.codicon-close-all:before { content: "\eac1" } -.codicon-cloud-download:before { content: "\eac2" } -.codicon-cloud-upload:before { content: "\eac3" } -.codicon-code:before { content: "\eac4" } -.codicon-collapse-all:before { content: "\eac5" } -.codicon-color-mode:before { content: "\eac6" } -.codicon-comment-discussion:before { content: "\eac7" } -.codicon-credit-card:before { content: "\eac9" } -.codicon-dash:before { content: "\eacc" } -.codicon-dashboard:before { content: "\eacd" } -.codicon-database:before { content: "\eace" } -.codicon-debug-continue:before { content: "\eacf" } -.codicon-debug-disconnect:before { content: "\ead0" } -.codicon-debug-pause:before { content: "\ead1" } -.codicon-debug-restart:before { content: "\ead2" } -.codicon-debug-start:before { content: "\ead3" } -.codicon-debug-step-into:before { content: "\ead4" } -.codicon-debug-step-out:before { content: "\ead5" } -.codicon-debug-step-over:before { content: "\ead6" } -.codicon-debug-stop:before { content: "\ead7" } -.codicon-debug:before { content: "\ead8" } -.codicon-device-camera-video:before { content: "\ead9" } -.codicon-device-camera:before { content: "\eada" } -.codicon-device-mobile:before { content: "\eadb" } -.codicon-diff-added:before { content: "\eadc" } -.codicon-diff-ignored:before { content: "\eadd" } -.codicon-diff-modified:before { content: "\eade" } -.codicon-diff-removed:before { content: "\eadf" } -.codicon-diff-renamed:before { content: "\eae0" } -.codicon-diff:before { content: "\eae1" } -.codicon-discard:before { content: "\eae2" } -.codicon-editor-layout:before { content: "\eae3" } -.codicon-empty-window:before { content: "\eae4" } -.codicon-exclude:before { content: "\eae5" } -.codicon-extensions:before { content: "\eae6" } -.codicon-eye-closed:before { content: "\eae7" } -.codicon-file-binary:before { content: "\eae8" } -.codicon-file-code:before { content: "\eae9" } -.codicon-file-media:before { content: "\eaea" } -.codicon-file-pdf:before { content: "\eaeb" } -.codicon-file-submodule:before { content: "\eaec" } -.codicon-file-symlink-directory:before { content: "\eaed" } -.codicon-file-symlink-file:before { content: "\eaee" } -.codicon-file-zip:before { content: "\eaef" } -.codicon-files:before { content: "\eaf0" } -.codicon-filter:before { content: "\eaf1" } -.codicon-flame:before { content: "\eaf2" } -.codicon-fold-down:before { content: "\eaf3" } -.codicon-fold-up:before { content: "\eaf4" } -.codicon-fold:before { content: "\eaf5" } -.codicon-folder-active:before { content: "\eaf6" } -.codicon-folder-opened:before { content: "\eaf7" } -.codicon-gear:before { content: "\eaf8" } -.codicon-gift:before { content: "\eaf9" } -.codicon-gist-secret:before { content: "\eafa" } -.codicon-gist:before { content: "\eafb" } -.codicon-git-commit:before { content: "\eafc" } -.codicon-git-compare:before { content: "\eafd" } -.codicon-compare-changes:before { content: "\eafd" } -.codicon-git-merge:before { content: "\eafe" } -.codicon-github-action:before { content: "\eaff" } -.codicon-github-alt:before { content: "\eb00" } -.codicon-globe:before { content: "\eb01" } -.codicon-grabber:before { content: "\eb02" } -.codicon-graph:before { content: "\eb03" } -.codicon-gripper:before { content: "\eb04" } -.codicon-heart:before { content: "\eb05" } -.codicon-home:before { content: "\eb06" } -.codicon-horizontal-rule:before { content: "\eb07" } -.codicon-hubot:before { content: "\eb08" } -.codicon-inbox:before { content: "\eb09" } -.codicon-issue-reopened:before { content: "\eb0b" } -.codicon-issues:before { content: "\eb0c" } -.codicon-italic:before { content: "\eb0d" } -.codicon-jersey:before { content: "\eb0e" } -.codicon-json:before { content: "\eb0f" } -.codicon-kebab-vertical:before { content: "\eb10" } -.codicon-key:before { content: "\eb11" } -.codicon-law:before { content: "\eb12" } -.codicon-lightbulb-autofix:before { content: "\eb13" } -.codicon-link-external:before { content: "\eb14" } -.codicon-link:before { content: "\eb15" } -.codicon-list-ordered:before { content: "\eb16" } -.codicon-list-unordered:before { content: "\eb17" } -.codicon-live-share:before { content: "\eb18" } -.codicon-loading:before { content: "\eb19" } -.codicon-location:before { content: "\eb1a" } -.codicon-mail-read:before { content: "\eb1b" } -.codicon-mail:before { content: "\eb1c" } -.codicon-markdown:before { content: "\eb1d" } -.codicon-megaphone:before { content: "\eb1e" } -.codicon-mention:before { content: "\eb1f" } -.codicon-milestone:before { content: "\eb20" } -.codicon-mortar-board:before { content: "\eb21" } -.codicon-move:before { content: "\eb22" } -.codicon-multiple-windows:before { content: "\eb23" } -.codicon-mute:before { content: "\eb24" } -.codicon-no-newline:before { content: "\eb25" } -.codicon-note:before { content: "\eb26" } -.codicon-octoface:before { content: "\eb27" } -.codicon-open-preview:before { content: "\eb28" } -.codicon-package:before { content: "\eb29" } -.codicon-paintcan:before { content: "\eb2a" } -.codicon-pin:before { content: "\eb2b" } -.codicon-play:before { content: "\eb2c" } -.codicon-run:before { content: "\eb2c" } -.codicon-plug:before { content: "\eb2d" } -.codicon-preserve-case:before { content: "\eb2e" } -.codicon-preview:before { content: "\eb2f" } -.codicon-project:before { content: "\eb30" } -.codicon-pulse:before { content: "\eb31" } -.codicon-question:before { content: "\eb32" } -.codicon-quote:before { content: "\eb33" } -.codicon-radio-tower:before { content: "\eb34" } -.codicon-reactions:before { content: "\eb35" } -.codicon-references:before { content: "\eb36" } -.codicon-refresh:before { content: "\eb37" } -.codicon-regex:before { content: "\eb38" } -.codicon-remote-explorer:before { content: "\eb39" } -.codicon-remote:before { content: "\eb3a" } -.codicon-remove:before { content: "\eb3b" } -.codicon-replace-all:before { content: "\eb3c" } -.codicon-replace:before { content: "\eb3d" } -.codicon-repo-clone:before { content: "\eb3e" } -.codicon-repo-force-push:before { content: "\eb3f" } -.codicon-repo-pull:before { content: "\eb40" } -.codicon-repo-push:before { content: "\eb41" } -.codicon-report:before { content: "\eb42" } -.codicon-request-changes:before { content: "\eb43" } -.codicon-rocket:before { content: "\eb44" } -.codicon-root-folder-opened:before { content: "\eb45" } -.codicon-root-folder:before { content: "\eb46" } -.codicon-rss:before { content: "\eb47" } -.codicon-ruby:before { content: "\eb48" } -.codicon-save-all:before { content: "\eb49" } -.codicon-save-as:before { content: "\eb4a" } -.codicon-save:before { content: "\eb4b" } -.codicon-screen-full:before { content: "\eb4c" } -.codicon-screen-normal:before { content: "\eb4d" } -.codicon-search-stop:before { content: "\eb4e" } -.codicon-server:before { content: "\eb50" } -.codicon-settings-gear:before { content: "\eb51" } -.codicon-settings:before { content: "\eb52" } -.codicon-shield:before { content: "\eb53" } -.codicon-smiley:before { content: "\eb54" } -.codicon-sort-precedence:before { content: "\eb55" } -.codicon-split-horizontal:before { content: "\eb56" } -.codicon-split-vertical:before { content: "\eb57" } -.codicon-squirrel:before { content: "\eb58" } -.codicon-star-full:before { content: "\eb59" } -.codicon-star-half:before { content: "\eb5a" } -.codicon-symbol-class:before { content: "\eb5b" } -.codicon-symbol-color:before { content: "\eb5c" } -.codicon-symbol-constant:before { content: "\eb5d" } -.codicon-symbol-enum-member:before { content: "\eb5e" } -.codicon-symbol-field:before { content: "\eb5f" } -.codicon-symbol-file:before { content: "\eb60" } -.codicon-symbol-interface:before { content: "\eb61" } -.codicon-symbol-keyword:before { content: "\eb62" } -.codicon-symbol-misc:before { content: "\eb63" } -.codicon-symbol-operator:before { content: "\eb64" } -.codicon-symbol-property:before { content: "\eb65" } -.codicon-wrench:before { content: "\eb65" } -.codicon-wrench-subaction:before { content: "\eb65" } -.codicon-symbol-snippet:before { content: "\eb66" } -.codicon-tasklist:before { content: "\eb67" } -.codicon-telescope:before { content: "\eb68" } -.codicon-text-size:before { content: "\eb69" } -.codicon-three-bars:before { content: "\eb6a" } -.codicon-thumbsdown:before { content: "\eb6b" } -.codicon-thumbsup:before { content: "\eb6c" } -.codicon-tools:before { content: "\eb6d" } -.codicon-triangle-down:before { content: "\eb6e" } -.codicon-triangle-left:before { content: "\eb6f" } -.codicon-triangle-right:before { content: "\eb70" } -.codicon-triangle-up:before { content: "\eb71" } -.codicon-twitter:before { content: "\eb72" } -.codicon-unfold:before { content: "\eb73" } -.codicon-unlock:before { content: "\eb74" } -.codicon-unmute:before { content: "\eb75" } -.codicon-unverified:before { content: "\eb76" } -.codicon-verified:before { content: "\eb77" } -.codicon-versions:before { content: "\eb78" } -.codicon-vm-active:before { content: "\eb79" } -.codicon-vm-outline:before { content: "\eb7a" } -.codicon-vm-running:before { content: "\eb7b" } -.codicon-watch:before { content: "\eb7c" } -.codicon-whitespace:before { content: "\eb7d" } -.codicon-whole-word:before { content: "\eb7e" } -.codicon-window:before { content: "\eb7f" } -.codicon-word-wrap:before { content: "\eb80" } -.codicon-zoom-in:before { content: "\eb81" } -.codicon-zoom-out:before { content: "\eb82" } -.codicon-list-filter:before { content: "\eb83" } -.codicon-list-flat:before { content: "\eb84" } -.codicon-list-selection:before { content: "\eb85" } -.codicon-selection:before { content: "\eb85" } -.codicon-list-tree:before { content: "\eb86" } -.codicon-debug-breakpoint-function-unverified:before { content: "\eb87" } -.codicon-debug-breakpoint-function:before { content: "\eb88" } -.codicon-debug-breakpoint-function-disabled:before { content: "\eb88" } -.codicon-debug-stackframe-active:before { content: "\eb89" } -.codicon-circle-small-filled:before { content: "\eb8a" } -.codicon-debug-stackframe-dot:before { content: "\eb8a" } -.codicon-debug-stackframe:before { content: "\eb8b" } -.codicon-debug-stackframe-focused:before { content: "\eb8b" } -.codicon-debug-breakpoint-unsupported:before { content: "\eb8c" } -.codicon-symbol-string:before { content: "\eb8d" } -.codicon-debug-reverse-continue:before { content: "\eb8e" } -.codicon-debug-step-back:before { content: "\eb8f" } -.codicon-debug-restart-frame:before { content: "\eb90" } -.codicon-debug-alt:before { content: "\eb91" } -.codicon-call-incoming:before { content: "\eb92" } -.codicon-call-outgoing:before { content: "\eb93" } -.codicon-menu:before { content: "\eb94" } -.codicon-expand-all:before { content: "\eb95" } -.codicon-feedback:before { content: "\eb96" } -.codicon-group-by-ref-type:before { content: "\eb97" } -.codicon-ungroup-by-ref-type:before { content: "\eb98" } -.codicon-account:before { content: "\eb99" } -.codicon-bell-dot:before { content: "\eb9a" } -.codicon-debug-console:before { content: "\eb9b" } -.codicon-library:before { content: "\eb9c" } -.codicon-output:before { content: "\eb9d" } -.codicon-run-all:before { content: "\eb9e" } -.codicon-sync-ignored:before { content: "\eb9f" } -.codicon-pinned:before { content: "\eba0" } -.codicon-github-inverted:before { content: "\eba1" } -.codicon-server-process:before { content: "\eba2" } -.codicon-server-environment:before { content: "\eba3" } -.codicon-pass:before { content: "\eba4" } -.codicon-issue-closed:before { content: "\eba4" } -.codicon-stop-circle:before { content: "\eba5" } -.codicon-play-circle:before { content: "\eba6" } -.codicon-record:before { content: "\eba7" } -.codicon-debug-alt-small:before { content: "\eba8" } -.codicon-vm-connect:before { content: "\eba9" } -.codicon-cloud:before { content: "\ebaa" } -.codicon-merge:before { content: "\ebab" } -.codicon-export:before { content: "\ebac" } -.codicon-graph-left:before { content: "\ebad" } -.codicon-magnet:before { content: "\ebae" } -.codicon-notebook:before { content: "\ebaf" } -.codicon-redo:before { content: "\ebb0" } -.codicon-check-all:before { content: "\ebb1" } -.codicon-pinned-dirty:before { content: "\ebb2" } -.codicon-pass-filled:before { content: "\ebb3" } -.codicon-circle-large-filled:before { content: "\ebb4" } -.codicon-circle-large-outline:before { content: "\ebb5" } -.codicon-combine:before { content: "\ebb6" } -.codicon-gather:before { content: "\ebb6" } -.codicon-table:before { content: "\ebb7" } -.codicon-variable-group:before { content: "\ebb8" } -.codicon-type-hierarchy:before { content: "\ebb9" } -.codicon-type-hierarchy-sub:before { content: "\ebba" } -.codicon-type-hierarchy-super:before { content: "\ebbb" } -.codicon-git-pull-request-create:before { content: "\ebbc" } -.codicon-run-above:before { content: "\ebbd" } -.codicon-run-below:before { content: "\ebbe" } -.codicon-notebook-template:before { content: "\ebbf" } -.codicon-debug-rerun:before { content: "\ebc0" } -.codicon-workspace-trusted:before { content: "\ebc1" } -.codicon-workspace-untrusted:before { content: "\ebc2" } -.codicon-workspace-unknown:before { content: "\ebc3" } -.codicon-terminal-cmd:before { content: "\ebc4" } -.codicon-terminal-debian:before { content: "\ebc5" } -.codicon-terminal-linux:before { content: "\ebc6" } -.codicon-terminal-powershell:before { content: "\ebc7" } -.codicon-terminal-tmux:before { content: "\ebc8" } -.codicon-terminal-ubuntu:before { content: "\ebc9" } -.codicon-terminal-bash:before { content: "\ebca" } -.codicon-arrow-swap:before { content: "\ebcb" } -.codicon-copy:before { content: "\ebcc" } -.codicon-person-add:before { content: "\ebcd" } -.codicon-filter-filled:before { content: "\ebce" } -.codicon-wand:before { content: "\ebcf" } -.codicon-debug-line-by-line:before { content: "\ebd0" } -.codicon-inspect:before { content: "\ebd1" } -.codicon-layers:before { content: "\ebd2" } -.codicon-layers-dot:before { content: "\ebd3" } -.codicon-layers-active:before { content: "\ebd4" } -.codicon-compass:before { content: "\ebd5" } -.codicon-compass-dot:before { content: "\ebd6" } -.codicon-compass-active:before { content: "\ebd7" } -.codicon-azure:before { content: "\ebd8" } -.codicon-issue-draft:before { content: "\ebd9" } -.codicon-git-pull-request-closed:before { content: "\ebda" } -.codicon-git-pull-request-draft:before { content: "\ebdb" } -.codicon-debug-all:before { content: "\ebdc" } -.codicon-debug-coverage:before { content: "\ebdd" } -.codicon-run-errors:before { content: "\ebde" } -.codicon-folder-library:before { content: "\ebdf" } -.codicon-debug-continue-small:before { content: "\ebe0" } -.codicon-beaker-stop:before { content: "\ebe1" } -.codicon-graph-line:before { content: "\ebe2" } -.codicon-graph-scatter:before { content: "\ebe3" } -.codicon-pie-chart:before { content: "\ebe4" } -.codicon-bracket:before { content: "\eb0f" } -.codicon-bracket-dot:before { content: "\ebe5" } -.codicon-bracket-error:before { content: "\ebe6" } -.codicon-lock-small:before { content: "\ebe7" } -.codicon-azure-devops:before { content: "\ebe8" } -.codicon-verified-filled:before { content: "\ebe9" } -.codicon-newline:before { content: "\ebea" } -.codicon-layout:before { content: "\ebeb" } -.codicon-layout-activitybar-left:before { content: "\ebec" } -.codicon-layout-activitybar-right:before { content: "\ebed" } -.codicon-layout-panel-left:before { content: "\ebee" } -.codicon-layout-panel-center:before { content: "\ebef" } -.codicon-layout-panel-justify:before { content: "\ebf0" } -.codicon-layout-panel-right:before { content: "\ebf1" } -.codicon-layout-panel:before { content: "\ebf2" } -.codicon-layout-sidebar-left:before { content: "\ebf3" } -.codicon-layout-sidebar-right:before { content: "\ebf4" } -.codicon-layout-statusbar:before { content: "\ebf5" } -.codicon-layout-menubar:before { content: "\ebf6" } -.codicon-layout-centered:before { content: "\ebf7" } -.codicon-target:before { content: "\ebf8" } -.codicon-indent:before { content: "\ebf9" } -.codicon-record-small:before { content: "\ebfa" } -.codicon-error-small:before { content: "\ebfb" } -.codicon-arrow-circle-down:before { content: "\ebfc" } -.codicon-arrow-circle-left:before { content: "\ebfd" } -.codicon-arrow-circle-right:before { content: "\ebfe" } -.codicon-arrow-circle-up:before { content: "\ebff" } -.codicon-layout-sidebar-right-off:before { content: "\ec00" } -.codicon-layout-panel-off:before { content: "\ec01" } -.codicon-layout-sidebar-left-off:before { content: "\ec02" } -.codicon-blank:before { content: "\ec03" } -.codicon-heart-filled:before { content: "\ec04" } -.codicon-map:before { content: "\ec05" } -.codicon-map-filled:before { content: "\ec06" } -.codicon-circle-small:before { content: "\ec07" } -.codicon-bell-slash:before { content: "\ec08" } -.codicon-bell-slash-dot:before { content: "\ec09" } -.codicon-comment-unresolved:before { content: "\ec0a" } -.codicon-git-pull-request-go-to-changes:before { content: "\ec0b" } -.codicon-git-pull-request-new-changes:before { content: "\ec0c" } diff --git a/workspaces/wi/wi-extension/resources/codicons/codicon.csv b/workspaces/wi/wi-extension/resources/codicons/codicon.csv deleted file mode 100644 index 0fd7d656add..00000000000 --- a/workspaces/wi/wi-extension/resources/codicons/codicon.csv +++ /dev/null @@ -1,421 +0,0 @@ -short_name,character,unicode -account,,EB99 -activate-breakpoints,,EA97 -add,,EA60 -archive,,EA98 -arrow-both,,EA99 -arrow-circle-down,,EBFC -arrow-circle-left,,EBFD -arrow-circle-right,,EBFE -arrow-circle-up,,EBFF -arrow-down,,EA9A -arrow-left,,EA9B -arrow-right,,EA9C -arrow-small-down,,EA9D -arrow-small-left,,EA9E -arrow-small-right,,EA9F -arrow-small-up,,EAA0 -arrow-swap,,EBCB -arrow-up,,EAA1 -azure-devops,,EBE8 -azure,,EBD8 -beaker-stop,,EBE1 -beaker,,EA79 -bell-dot,,EB9A -bell-slash-dot,,EC09 -bell-slash,,EC08 -bell,,EAA2 -blank,,EC03 -bold,,EAA3 -book,,EAA4 -bookmark,,EAA5 -bracket-dot,,EBE5 -bracket-error,,EBE6 -briefcase,,EAAC -broadcast,,EAAD -browser,,EAAE -bug,,EAAF -calendar,,EAB0 -call-incoming,,EB92 -call-outgoing,,EB93 -case-sensitive,,EAB1 -check-all,,EBB1 -check,,EAB2 -checklist,,EAB3 -chevron-down,,EAB4 -chevron-left,,EAB5 -chevron-right,,EAB6 -chevron-up,,EAB7 -chrome-close,,EAB8 -chrome-maximize,,EAB9 -chrome-minimize,,EABA -chrome-restore,,EABB -circle-filled,,EA71 -circle-large-filled,,EBB4 -circle-large-outline,,EBB5 -circle-outline,,EABC -circle-slash,,EABD -circle-small-filled,,EB8A -circle-small,,EC07 -circuit-board,,EABE -clear-all,,EABF -clippy,,EAC0 -close-all,,EAC1 -close,,EA76 -cloud-download,,EAC2 -cloud-upload,,EAC3 -cloud,,EBAA -code,,EAC4 -collapse-all,,EAC5 -color-mode,,EAC6 -combine,,EBB6 -comment-discussion,,EAC7 -comment-unresolved,,EC0A -comment,,EA6B -compass-active,,EBD7 -compass-dot,,EBD6 -compass,,EBD5 -copy,,EBCC -credit-card,,EAC9 -dash,,EACC -dashboard,,EACD -database,,EACE -debug-all,,EBDC -debug-alt-small,,EBA8 -debug-alt,,EB91 -debug-breakpoint-conditional-unverified,,EAA6 -debug-breakpoint-conditional,,EAA7 -debug-breakpoint-data-unverified,,EAA8 -debug-breakpoint-data,,EAA9 -debug-breakpoint-function-unverified,,EB87 -debug-breakpoint-function,,EB88 -debug-breakpoint-log-unverified,,EAAA -debug-breakpoint-log,,EAAB -debug-breakpoint-unsupported,,EB8C -debug-console,,EB9B -debug-continue-small,,EBE0 -debug-continue,,EACF -debug-coverage,,EBDD -debug-disconnect,,EAD0 -debug-line-by-line,,EBD0 -debug-pause,,EAD1 -debug-rerun,,EBC0 -debug-restart-frame,,EB90 -debug-restart,,EAD2 -debug-reverse-continue,,EB8E -debug-stackframe-active,,EB89 -debug-stackframe,,EB8B -debug-start,,EAD3 -debug-step-back,,EB8F -debug-step-into,,EAD4 -debug-step-out,,EAD5 -debug-step-over,,EAD6 -debug-stop,,EAD7 -debug,,EAD8 -desktop-download,,EA78 -device-camera-video,,EAD9 -device-camera,,EADA -device-mobile,,EADB -diff-added,,EADC -diff-ignored,,EADD -diff-modified,,EADE -diff-removed,,EADF -diff-renamed,,EAE0 -diff,,EAE1 -discard,,EAE2 -edit,,EA73 -editor-layout,,EAE3 -ellipsis,,EA7C -empty-window,,EAE4 -error-small,,EBFB -error,,EA87 -exclude,,EAE5 -expand-all,,EB95 -export,,EBAC -extensions,,EAE6 -eye-closed,,EAE7 -eye,,EA70 -feedback,,EB96 -file-binary,,EAE8 -file-code,,EAE9 -file-media,,EAEA -file-pdf,,EAEB -file-submodule,,EAEC -file-symlink-directory,,EAED -file-symlink-file,,EAEE -file-zip,,EAEF -file,,EA7B -files,,EAF0 -filter-filled,,EBCE -filter,,EAF1 -flame,,EAF2 -fold-down,,EAF3 -fold-up,,EAF4 -fold,,EAF5 -folder-active,,EAF6 -folder-library,,EBDF -folder-opened,,EAF7 -folder,,EA83 -gear,,EAF8 -gift,,EAF9 -gist-secret,,EAFA -git-commit,,EAFC -git-compare,,EAFD -git-merge,,EAFE -git-pull-request-closed,,EBDA -git-pull-request-create,,EBBC -git-pull-request-draft,,EBDB -git-pull-request-go-to-changes,,EC0B -git-pull-request-new-changes,,EC0C -git-pull-request,,EA64 -github-action,,EAFF -github-alt,,EB00 -github-inverted,,EBA1 -github,,EA84 -globe,,EB01 -go-to-file,,EA94 -grabber,,EB02 -graph-left,,EBAD -graph-line,,EBE2 -graph-scatter,,EBE3 -graph,,EB03 -gripper,,EB04 -group-by-ref-type,,EB97 -heart-filled,,EC04 -heart,,EB05 -history,,EA82 -home,,EB06 -horizontal-rule,,EB07 -hubot,,EB08 -inbox,,EB09 -indent,,EBF9 -info,,EA74 -inspect,,EBD1 -issue-draft,,EBD9 -issue-reopened,,EB0B -issues,,EB0C -italic,,EB0D -jersey,,EB0E -json,,EB0F -kebab-vertical,,EB10 -key,,EB11 -law,,EB12 -layers-active,,EBD4 -layers-dot,,EBD3 -layers,,EBD2 -layout-activitybar-left,,EBEC -layout-activitybar-right,,EBED -layout-centered,,EBF7 -layout-menubar,,EBF6 -layout-panel-center,,EBEF -layout-panel-justify,,EBF0 -layout-panel-left,,EBEE -layout-panel-off,,EC01 -layout-panel-right,,EBF1 -layout-panel,,EBF2 -layout-sidebar-left-off,,EC02 -layout-sidebar-left,,EBF3 -layout-sidebar-right-off,,EC00 -layout-sidebar-right,,EBF4 -layout-statusbar,,EBF5 -layout,,EBEB -library,,EB9C -lightbulb-autofix,,EB13 -lightbulb,,EA61 -link-external,,EB14 -link,,EB15 -list-filter,,EB83 -list-flat,,EB84 -list-ordered,,EB16 -list-selection,,EB85 -list-tree,,EB86 -list-unordered,,EB17 -live-share,,EB18 -loading,,EB19 -location,,EB1A -lock-small,,EBE7 -lock,,EA75 -magnet,,EBAE -mail-read,,EB1B -mail,,EB1C -map-filled,,EC06 -map,,EC05 -markdown,,EB1D -megaphone,,EB1E -mention,,EB1F -menu,,EB94 -merge,,EBAB -milestone,,EB20 -mirror,,EA69 -mortar-board,,EB21 -move,,EB22 -multiple-windows,,EB23 -mute,,EB24 -new-file,,EA7F -new-folder,,EA80 -newline,,EBEA -no-newline,,EB25 -note,,EB26 -notebook-template,,EBBF -notebook,,EBAF -octoface,,EB27 -open-preview,,EB28 -organization,,EA7E -output,,EB9D -package,,EB29 -paintcan,,EB2A -pass-filled,,EBB3 -pass,,EBA4 -person-add,,EBCD -person,,EA67 -pie-chart,,EBE4 -pin,,EB2B -pinned-dirty,,EBB2 -pinned,,EBA0 -play-circle,,EBA6 -play,,EB2C -plug,,EB2D -preserve-case,,EB2E -preview,,EB2F -primitive-square,,EA72 -project,,EB30 -pulse,,EB31 -question,,EB32 -quote,,EB33 -radio-tower,,EB34 -reactions,,EB35 -record-keys,,EA65 -record-small,,EBFA -record,,EBA7 -redo,,EBB0 -references,,EB36 -refresh,,EB37 -regex,,EB38 -remote-explorer,,EB39 -remote,,EB3A -remove,,EB3B -replace-all,,EB3C -replace,,EB3D -reply,,EA7D -repo-clone,,EB3E -repo-force-push,,EB3F -repo-forked,,EA63 -repo-pull,,EB40 -repo-push,,EB41 -repo,,EA62 -report,,EB42 -request-changes,,EB43 -rocket,,EB44 -root-folder-opened,,EB45 -root-folder,,EB46 -rss,,EB47 -ruby,,EB48 -run-above,,EBBD -run-all,,EB9E -run-below,,EBBE -run-errors,,EBDE -save-all,,EB49 -save-as,,EB4A -save,,EB4B -screen-full,,EB4C -screen-normal,,EB4D -search-stop,,EB4E -search,,EA6D -server-environment,,EBA3 -server-process,,EBA2 -server,,EB50 -settings-gear,,EB51 -settings,,EB52 -shield,,EB53 -sign-in,,EA6F -sign-out,,EA6E -smiley,,EB54 -sort-precedence,,EB55 -source-control,,EA68 -split-horizontal,,EB56 -split-vertical,,EB57 -squirrel,,EB58 -star-empty,,EA6A -star-full,,EB59 -star-half,,EB5A -stop-circle,,EBA5 -symbol-array,,EA8A -symbol-boolean,,EA8F -symbol-class,,EB5B -symbol-color,,EB5C -symbol-constant,,EB5D -symbol-enum-member,,EB5E -symbol-enum,,EA95 -symbol-event,,EA86 -symbol-field,,EB5F -symbol-file,,EB60 -symbol-interface,,EB61 -symbol-key,,EA93 -symbol-keyword,,EB62 -symbol-method,,EA8C -symbol-misc,,EB63 -symbol-namespace,,EA8B -symbol-numeric,,EA90 -symbol-operator,,EB64 -symbol-parameter,,EA92 -symbol-property,,EB65 -symbol-ruler,,EA96 -symbol-snippet,,EB66 -symbol-string,,EB8D -symbol-structure,,EA91 -symbol-variable,,EA88 -sync-ignored,,EB9F -sync,,EA77 -table,,EBB7 -tag,,EA66 -target,,EBF8 -tasklist,,EB67 -telescope,,EB68 -terminal-bash,,EBCA -terminal-cmd,,EBC4 -terminal-debian,,EBC5 -terminal-linux,,EBC6 -terminal-powershell,,EBC7 -terminal-tmux,,EBC8 -terminal-ubuntu,,EBC9 -terminal,,EA85 -text-size,,EB69 -three-bars,,EB6A -thumbsdown,,EB6B -thumbsup,,EB6C -tools,,EB6D -trash,,EA81 -triangle-down,,EB6E -triangle-left,,EB6F -triangle-right,,EB70 -triangle-up,,EB71 -twitter,,EB72 -type-hierarchy-sub,,EBBA -type-hierarchy-super,,EBBB -type-hierarchy,,EBB9 -unfold,,EB73 -ungroup-by-ref-type,,EB98 -unlock,,EB74 -unmute,,EB75 -unverified,,EB76 -variable-group,,EBB8 -verified-filled,,EBE9 -verified,,EB77 -versions,,EB78 -vm-active,,EB79 -vm-connect,,EBA9 -vm-outline,,EB7A -vm-running,,EB7B -vm,,EA7A -wand,,EBCF -warning,,EA6C -watch,,EB7C -whitespace,,EB7D -whole-word,,EB7E -window,,EB7F -word-wrap,,EB80 -workspace-trusted,,EBC1 -workspace-unknown,,EBC3 -workspace-untrusted,,EBC2 -zoom-in,,EB81 -zoom-out,,EB82 diff --git a/workspaces/wi/wi-extension/resources/codicons/codicon.html b/workspaces/wi/wi-extension/resources/codicons/codicon.html deleted file mode 100644 index ec8a3224959..00000000000 --- a/workspaces/wi/wi-extension/resources/codicons/codicon.html +++ /dev/null @@ -1,3871 +0,0 @@ - - - - - codicon | The icon font for Visual Studio Code - - - - - - - -

codicon

- - - -
-
- - - -
- account - -
-
- - - -
- activate-breakpoints - -
-
- - - -
- add - -
-
- - - -
- archive - -
-
- - - -
- arrow-both - -
-
- - - -
- arrow-circle-down - -
-
- - - -
- arrow-circle-left - -
-
- - - -
- arrow-circle-right - -
-
- - - -
- arrow-circle-up - -
-
- - - -
- arrow-down - -
-
- - - -
- arrow-left - -
-
- - - -
- arrow-right - -
-
- - - -
- arrow-small-down - -
-
- - - -
- arrow-small-left - -
-
- - - -
- arrow-small-right - -
-
- - - -
- arrow-small-up - -
-
- - - -
- arrow-swap - -
-
- - - -
- arrow-up - -
-
- - - -
- azure-devops - -
-
- - - -
- azure - -
-
- - - -
- beaker-stop - -
-
- - - -
- beaker - -
-
- - - -
- bell-dot - -
-
- - - -
- bell-slash-dot - -
-
- - - -
- bell-slash - -
-
- - - -
- bell - -
-
- - - -
- blank - -
-
- - - -
- bold - -
-
- - - -
- book - -
-
- - - -
- bookmark - -
-
- - - -
- bracket-dot - -
-
- - - -
- bracket-error - -
-
- - - -
- briefcase - -
-
- - - -
- broadcast - -
-
- - - -
- browser - -
-
- - - -
- bug - -
-
- - - -
- calendar - -
-
- - - -
- call-incoming - -
-
- - - -
- call-outgoing - -
-
- - - -
- case-sensitive - -
-
- - - -
- check-all - -
-
- - - -
- check - -
-
- - - -
- checklist - -
-
- - - -
- chevron-down - -
-
- - - -
- chevron-left - -
-
- - - -
- chevron-right - -
-
- - - -
- chevron-up - -
-
- - - -
- chrome-close - -
-
- - - -
- chrome-maximize - -
-
- - - -
- chrome-minimize - -
-
- - - -
- chrome-restore - -
-
- - - -
- circle-filled - -
-
- - - -
- circle-large-filled - -
-
- - - -
- circle-large-outline - -
-
- - - -
- circle-outline - -
-
- - - -
- circle-slash - -
-
- - - -
- circle-small-filled - -
-
- - - -
- circle-small - -
-
- - - -
- circuit-board - -
-
- - - -
- clear-all - -
-
- - - -
- clippy - -
-
- - - -
- close-all - -
-
- - - -
- close - -
-
- - - -
- cloud-download - -
-
- - - -
- cloud-upload - -
-
- - - -
- cloud - -
-
- - - -
- code - -
-
- - - -
- collapse-all - -
-
- - - -
- color-mode - -
-
- - - -
- combine - -
-
- - - -
- comment-discussion - -
-
- - - -
- comment-unresolved - -
-
- - - -
- comment - -
-
- - - -
- compass-active - -
-
- - - -
- compass-dot - -
-
- - - -
- compass - -
-
- - - -
- copy - -
-
- - - -
- credit-card - -
-
- - - -
- dash - -
-
- - - -
- dashboard - -
-
- - - -
- database - -
-
- - - -
- debug-all - -
-
- - - -
- debug-alt-small - -
-
- - - -
- debug-alt - -
-
- - - -
- debug-breakpoint-conditional-unverified - -
-
- - - -
- debug-breakpoint-conditional - -
-
- - - -
- debug-breakpoint-data-unverified - -
-
- - - -
- debug-breakpoint-data - -
-
- - - -
- debug-breakpoint-function-unverified - -
-
- - - -
- debug-breakpoint-function - -
-
- - - -
- debug-breakpoint-log-unverified - -
-
- - - -
- debug-breakpoint-log - -
-
- - - -
- debug-breakpoint-unsupported - -
-
- - - -
- debug-console - -
-
- - - -
- debug-continue-small - -
-
- - - -
- debug-continue - -
-
- - - -
- debug-coverage - -
-
- - - -
- debug-disconnect - -
-
- - - -
- debug-line-by-line - -
-
- - - -
- debug-pause - -
-
- - - -
- debug-rerun - -
-
- - - -
- debug-restart-frame - -
-
- - - -
- debug-restart - -
-
- - - -
- debug-reverse-continue - -
-
- - - -
- debug-stackframe-active - -
-
- - - -
- debug-stackframe - -
-
- - - -
- debug-start - -
-
- - - -
- debug-step-back - -
-
- - - -
- debug-step-into - -
-
- - - -
- debug-step-out - -
-
- - - -
- debug-step-over - -
-
- - - -
- debug-stop - -
-
- - - -
- debug - -
-
- - - -
- desktop-download - -
-
- - - -
- device-camera-video - -
-
- - - -
- device-camera - -
-
- - - -
- device-mobile - -
-
- - - -
- diff-added - -
-
- - - -
- diff-ignored - -
-
- - - -
- diff-modified - -
-
- - - -
- diff-removed - -
-
- - - -
- diff-renamed - -
-
- - - -
- diff - -
-
- - - -
- discard - -
-
- - - -
- edit - -
-
- - - -
- editor-layout - -
-
- - - -
- ellipsis - -
-
- - - -
- empty-window - -
-
- - - -
- error-small - -
-
- - - -
- error - -
-
- - - -
- exclude - -
-
- - - -
- expand-all - -
-
- - - -
- export - -
-
- - - -
- extensions - -
-
- - - -
- eye-closed - -
-
- - - -
- eye - -
-
- - - -
- feedback - -
-
- - - -
- file-binary - -
-
- - - -
- file-code - -
-
- - - -
- file-media - -
-
- - - -
- file-pdf - -
-
- - - -
- file-submodule - -
-
- - - -
- file-symlink-directory - -
-
- - - -
- file-symlink-file - -
-
- - - -
- file-zip - -
-
- - - -
- file - -
-
- - - -
- files - -
-
- - - -
- filter-filled - -
-
- - - -
- filter - -
-
- - - -
- flame - -
-
- - - -
- fold-down - -
-
- - - -
- fold-up - -
-
- - - -
- fold - -
-
- - - -
- folder-active - -
-
- - - -
- folder-library - -
-
- - - -
- folder-opened - -
-
- - - -
- folder - -
-
- - - -
- gear - -
-
- - - -
- gift - -
-
- - - -
- gist-secret - -
-
- - - -
- gist - -
-
- - - -
- git-commit - -
-
- - - -
- git-compare - -
-
- - - -
- git-merge - -
-
- - - -
- git-pull-request-closed - -
-
- - - -
- git-pull-request-create - -
-
- - - -
- git-pull-request-draft - -
-
- - - -
- git-pull-request-go-to-changes - -
-
- - - -
- git-pull-request-new-changes - -
-
- - - -
- git-pull-request - -
-
- - - -
- github-action - -
-
- - - -
- github-alt - -
-
- - - -
- github-inverted - -
-
- - - -
- github - -
-
- - - -
- globe - -
-
- - - -
- go-to-file - -
-
- - - -
- grabber - -
-
- - - -
- graph-left - -
-
- - - -
- graph-line - -
-
- - - -
- graph-scatter - -
-
- - - -
- graph - -
-
- - - -
- gripper - -
-
- - - -
- group-by-ref-type - -
-
- - - -
- heart-filled - -
-
- - - -
- heart - -
-
- - - -
- history - -
-
- - - -
- home - -
-
- - - -
- horizontal-rule - -
-
- - - -
- hubot - -
-
- - - -
- inbox - -
-
- - - -
- indent - -
-
- - - -
- info - -
-
- - - -
- inspect - -
-
- - - -
- issue-draft - -
-
- - - -
- issue-reopened - -
-
- - - -
- issues - -
-
- - - -
- italic - -
-
- - - -
- jersey - -
-
- - - -
- json - -
-
- - - -
- kebab-vertical - -
-
- - - -
- key - -
-
- - - -
- law - -
-
- - - -
- layers-active - -
-
- - - -
- layers-dot - -
-
- - - -
- layers - -
-
- - - -
- layout-activitybar-left - -
-
- - - -
- layout-activitybar-right - -
-
- - - -
- layout-centered - -
-
- - - -
- layout-menubar - -
-
- - - -
- layout-panel-center - -
-
- - - -
- layout-panel-justify - -
-
- - - -
- layout-panel-left - -
-
- - - -
- layout-panel-off - -
-
- - - -
- layout-panel-right - -
-
- - - -
- layout-panel - -
-
- - - -
- layout-sidebar-left-off - -
-
- - - -
- layout-sidebar-left - -
-
- - - -
- layout-sidebar-right-off - -
-
- - - -
- layout-sidebar-right - -
-
- - - -
- layout-statusbar - -
-
- - - -
- layout - -
-
- - - -
- library - -
-
- - - -
- lightbulb-autofix - -
-
- - - -
- lightbulb - -
-
- - - -
- link-external - -
-
- - - -
- link - -
-
- - - -
- list-filter - -
-
- - - -
- list-flat - -
-
- - - -
- list-ordered - -
-
- - - -
- list-selection - -
-
- - - -
- list-tree - -
-
- - - -
- list-unordered - -
-
- - - -
- live-share - -
-
- - - -
- loading - -
-
- - - -
- location - -
-
- - - -
- lock-small - -
-
- - - -
- lock - -
-
- - - -
- magnet - -
-
- - - -
- mail-read - -
-
- - - -
- mail - -
-
- - - -
- map-filled - -
-
- - - -
- map - -
-
- - - -
- markdown - -
-
- - - -
- megaphone - -
-
- - - -
- mention - -
-
- - - -
- menu - -
-
- - - -
- merge - -
-
- - - -
- milestone - -
-
- - - -
- mirror - -
-
- - - -
- mortar-board - -
-
- - - -
- move - -
-
- - - -
- multiple-windows - -
-
- - - -
- mute - -
-
- - - -
- new-file - -
-
- - - -
- new-folder - -
-
- - - -
- newline - -
-
- - - -
- no-newline - -
-
- - - -
- note - -
-
- - - -
- notebook-template - -
-
- - - -
- notebook - -
-
- - - -
- octoface - -
-
- - - -
- open-preview - -
-
- - - -
- organization - -
-
- - - -
- output - -
-
- - - -
- package - -
-
- - - -
- paintcan - -
-
- - - -
- pass-filled - -
-
- - - -
- pass - -
-
- - - -
- person-add - -
-
- - - -
- person - -
-
- - - -
- pie-chart - -
-
- - - -
- pin - -
-
- - - -
- pinned-dirty - -
-
- - - -
- pinned - -
-
- - - -
- play-circle - -
-
- - - -
- play - -
-
- - - -
- plug - -
-
- - - -
- preserve-case - -
-
- - - -
- preview - -
-
- - - -
- primitive-square - -
-
- - - -
- project - -
-
- - - -
- pulse - -
-
- - - -
- question - -
-
- - - -
- quote - -
-
- - - -
- radio-tower - -
-
- - - -
- reactions - -
-
- - - -
- record-keys - -
-
- - - -
- record-small - -
-
- - - -
- record - -
-
- - - -
- redo - -
-
- - - -
- references - -
-
- - - -
- refresh - -
-
- - - -
- regex - -
-
- - - -
- remote-explorer - -
-
- - - -
- remote - -
-
- - - -
- remove - -
-
- - - -
- replace-all - -
-
- - - -
- replace - -
-
- - - -
- reply - -
-
- - - -
- repo-clone - -
-
- - - -
- repo-force-push - -
-
- - - -
- repo-forked - -
-
- - - -
- repo-pull - -
-
- - - -
- repo-push - -
-
- - - -
- repo - -
-
- - - -
- report - -
-
- - - -
- request-changes - -
-
- - - -
- rocket - -
-
- - - -
- root-folder-opened - -
-
- - - -
- root-folder - -
-
- - - -
- rss - -
-
- - - -
- ruby - -
-
- - - -
- run-above - -
-
- - - -
- run-all - -
-
- - - -
- run-below - -
-
- - - -
- run-errors - -
-
- - - -
- save-all - -
-
- - - -
- save-as - -
-
- - - -
- save - -
-
- - - -
- screen-full - -
-
- - - -
- screen-normal - -
-
- - - -
- search-stop - -
-
- - - -
- search - -
-
- - - -
- server-environment - -
-
- - - -
- server-process - -
-
- - - -
- server - -
-
- - - -
- settings-gear - -
-
- - - -
- settings - -
-
- - - -
- shield - -
-
- - - -
- sign-in - -
-
- - - -
- sign-out - -
-
- - - -
- smiley - -
-
- - - -
- sort-precedence - -
-
- - - -
- source-control - -
-
- - - -
- split-horizontal - -
-
- - - -
- split-vertical - -
-
- - - -
- squirrel - -
-
- - - -
- star-empty - -
-
- - - -
- star-full - -
-
- - - -
- star-half - -
-
- - - -
- stop-circle - -
-
- - - -
- symbol-array - -
-
- - - -
- symbol-boolean - -
-
- - - -
- symbol-class - -
-
- - - -
- symbol-color - -
-
- - - -
- symbol-constant - -
-
- - - -
- symbol-enum-member - -
-
- - - -
- symbol-enum - -
-
- - - -
- symbol-event - -
-
- - - -
- symbol-field - -
-
- - - -
- symbol-file - -
-
- - - -
- symbol-interface - -
-
- - - -
- symbol-key - -
-
- - - -
- symbol-keyword - -
-
- - - -
- symbol-method - -
-
- - - -
- symbol-misc - -
-
- - - -
- symbol-namespace - -
-
- - - -
- symbol-numeric - -
-
- - - -
- symbol-operator - -
-
- - - -
- symbol-parameter - -
-
- - - -
- symbol-property - -
-
- - - -
- symbol-ruler - -
-
- - - -
- symbol-snippet - -
-
- - - -
- symbol-string - -
-
- - - -
- symbol-structure - -
-
- - - -
- symbol-variable - -
-
- - - -
- sync-ignored - -
-
- - - -
- sync - -
-
- - - -
- table - -
-
- - - -
- tag - -
-
- - - -
- target - -
-
- - - -
- tasklist - -
-
- - - -
- telescope - -
-
- - - -
- terminal-bash - -
-
- - - -
- terminal-cmd - -
-
- - - -
- terminal-debian - -
-
- - - -
- terminal-linux - -
-
- - - -
- terminal-powershell - -
-
- - - -
- terminal-tmux - -
-
- - - -
- terminal-ubuntu - -
-
- - - -
- terminal - -
-
- - - -
- text-size - -
-
- - - -
- three-bars - -
-
- - - -
- thumbsdown - -
-
- - - -
- thumbsup - -
-
- - - -
- tools - -
-
- - - -
- trash - -
-
- - - -
- triangle-down - -
-
- - - -
- triangle-left - -
-
- - - -
- triangle-right - -
-
- - - -
- triangle-up - -
-
- - - -
- twitter - -
-
- - - -
- type-hierarchy-sub - -
-
- - - -
- type-hierarchy-super - -
-
- - - -
- type-hierarchy - -
-
- - - -
- unfold - -
-
- - - -
- ungroup-by-ref-type - -
-
- - - -
- unlock - -
-
- - - -
- unmute - -
-
- - - -
- unverified - -
-
- - - -
- variable-group - -
-
- - - -
- verified-filled - -
-
- - - -
- verified - -
-
- - - -
- versions - -
-
- - - -
- vm-active - -
-
- - - -
- vm-connect - -
-
- - - -
- vm-outline - -
-
- - - -
- vm-running - -
-
- - - -
- vm - -
-
- - - -
- wand - -
-
- - - -
- warning - -
-
- - - -
- watch - -
-
- - - -
- whitespace - -
-
- - - -
- whole-word - -
-
- - - -
- window - -
-
- - - -
- word-wrap - -
-
- - - -
- workspace-trusted - -
-
- - - -
- workspace-unknown - -
-
- - - -
- workspace-untrusted - -
-
- - - -
- zoom-in - -
-
- - - -
- zoom-out - -
-
- -
📋 Copied:
- - - - - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/resources/codicons/codicon.svg b/workspaces/wi/wi-extension/resources/codicons/codicon.svg deleted file mode 100644 index 7689b4d9f5f..00000000000 --- a/workspaces/wi/wi-extension/resources/codicons/codicon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/workspaces/wi/wi-extension/resources/codicons/codicon.ttf b/workspaces/wi/wi-extension/resources/codicons/codicon.ttf deleted file mode 100644 index 5abfa748fb56c712c19d127f550727acc3fabe59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72504 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 aw7tK54Sg0|WnEidz9 - - - - - - - - - diff --git a/workspaces/wi/wi-extension/resources/icons/wso2-integrator-logo.png b/workspaces/wi/wi-extension/resources/icons/wso2-integrator-logo.png deleted file mode 100644 index 3c275ec54d7..00000000000 --- a/workspaces/wi/wi-extension/resources/icons/wso2-integrator-logo.png +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - WSO2 - diff --git a/workspaces/wi/wi-extension/src/RPCLayer.ts b/workspaces/wi/wi-extension/src/RPCLayer.ts deleted file mode 100644 index 78cf1117210..00000000000 --- a/workspaces/wi/wi-extension/src/RPCLayer.ts +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { WebviewPanel } from 'vscode'; -import { Messenger } from 'vscode-messenger'; -import { registerMainRpcHandlers } from './rpc-managers/main/rpc-handler'; - -export class RPCLayer { - static _messengers: Map = new Map(); - - static create(webViewPanel: WebviewPanel, projectUri: string): void { - if (this._messengers.has(projectUri)) { - this._messengers.get(projectUri)!.registerWebviewPanel(webViewPanel as WebviewPanel); - return; - } - const messenger = new Messenger(); - this._messengers.set(projectUri, messenger); - messenger.registerWebviewPanel(webViewPanel as WebviewPanel); - - // Register RPC handlers - registerMainRpcHandlers(messenger); - } - - static dispose(projectUri: string): void { - this._messengers.delete(projectUri); - } -} diff --git a/workspaces/wi/wi-extension/src/bi/utils.ts b/workspaces/wi/wi-extension/src/bi/utils.ts deleted file mode 100644 index 07ee44bf0d8..00000000000 --- a/workspaces/wi/wi-extension/src/bi/utils.ts +++ /dev/null @@ -1,79 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { Uri, Webview, workspace } from "vscode"; -import * as fs from 'fs'; -import * as path from 'path'; - -export interface ProjectInfo { - isBI: boolean; - isBallerina: boolean; - isMultiRoot: boolean; -}; - -export function getUri(webview: Webview, extensionUri: Uri, pathList: string[]) { - if (process.env.WEB_VIEW_DEV_MODE === "true") { - return new URL(pathList[pathList.length - 1], process.env.WEB_VIEW_DEV_HOST as string).href; - } - return webview.asWebviewUri(Uri.joinPath(extensionUri, ...pathList)); -} - -export function fetchProjectInfo(): ProjectInfo { - const workspaceUris = workspace.workspaceFolders ? workspace.workspaceFolders.map(folder => folder.uri) : []; - let isBICount = 0; // Counter for workspaces with isBI set to true - let isBalCount = 0; // Counter for workspaces with Ballerina project - - // Check each workspace folder's configuration for 'isBI' - for (const uri of workspaceUris) { - const isBallerina = checkIsBallerina(uri); - if (isBallerina) { - isBalCount++; - if (checkIsBI(uri)) { - isBICount++; - } - } - } - - return { - isBI: isBICount > 0, - isBallerina: isBalCount > 0, - isMultiRoot: isBalCount > 1 // Set to true only if more than one workspace has a Ballerina project - }; -} - -export function checkIsBI(uri: Uri): boolean { - const config = workspace.getConfiguration('ballerina', uri); - const inspected = config.inspect('isBI'); - // For now, assume BI is supported. This could be made configurable later. - const isBISupported = true; - - if (inspected && isBISupported) { // Added a check to see if the current version of ballerina supports bi - const valuesToCheck = [ - inspected.workspaceFolderValue, - inspected.workspaceValue, - inspected.globalValue - ]; - return valuesToCheck.find(value => value === true) !== undefined; // Return true if isBI is set to true - } - return false; // Return false if isBI is not set -} - -export function checkIsBallerina(uri: Uri): boolean { - const ballerinaTomlPath = path.join(uri.fsPath, 'Ballerina.toml'); - return fs.existsSync(ballerinaTomlPath); -} diff --git a/workspaces/wi/wi-extension/src/commands.ts b/workspaces/wi/wi-extension/src/commands.ts deleted file mode 100644 index cd24e80bf42..00000000000 --- a/workspaces/wi/wi-extension/src/commands.ts +++ /dev/null @@ -1,117 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import * as vscode from "vscode"; -import { COMMANDS } from "@wso2/wi-core"; -import { ViewType } from "@wso2/wi-core"; -import { ext } from "./extensionVariables"; -import { WebviewManager } from "./webviewManager"; -import { ExtensionAPIs } from "./extensionAPIs"; - -/** - * Register all extension commands - */ -export function registerCommands( - context: vscode.ExtensionContext, - webviewManager: WebviewManager, - extensionAPIs: ExtensionAPIs, -): void { - // Open welcome page command - context.subscriptions.push( - vscode.commands.registerCommand(COMMANDS.OPEN_WELCOME, () => { - try { - webviewManager.show(ViewType.WELCOME); - } catch (error) { - ext.logError("Failed to open welcome page", error as Error); - vscode.window.showErrorMessage("Failed to open welcome page"); - } - }), - ); - - // Create project command - context.subscriptions.push( - vscode.commands.registerCommand(COMMANDS.CREATE_PROJECT, () => { - try { - webviewManager.show(ViewType.CREATE_PROJECT); - } catch (error) { - ext.logError("Failed to open create project view", error as Error); - vscode.window.showErrorMessage("Failed to open create project view"); - } - }), - ); - - // Explore samples command - context.subscriptions.push( - vscode.commands.registerCommand(COMMANDS.EXPLORE_SAMPLES, () => { - try { - webviewManager.show(ViewType.SAMPLES); - } catch (error) { - ext.logError("Failed to open samples view", error as Error); - vscode.window.showErrorMessage("Failed to open samples view"); - } - }), - ); - - // Import project command - context.subscriptions.push( - vscode.commands.registerCommand(COMMANDS.IMPORT_PROJECT, () => { - try { - webviewManager.show(ViewType.IMPORT_EXTERNAL); - } catch (error) { - ext.logError("Failed to open import project view", error as Error); - vscode.window.showErrorMessage("Failed to open import project view"); - } - }), - ); - - // Open BI integration command - context.subscriptions.push( - vscode.commands.registerCommand(COMMANDS.OPEN_BI_INTEGRATION, () => { - if (extensionAPIs.isBIAvailable()) { - vscode.commands.executeCommand("workbench.view.extension.ballerina-integrator"); - } else { - vscode.window.showInformationMessage( - "BI Extension is not available. Please install the Ballerina Integrator extension.", - "Install", - ).then((selection) => { - if (selection === "Install") { - vscode.commands.executeCommand("workbench.extensions.search", "@id:wso2.ballerina-integrator"); - } - }); - } - }), - ); - - // Open MI integration command - context.subscriptions.push( - vscode.commands.registerCommand(COMMANDS.OPEN_MI_INTEGRATION, () => { - if (extensionAPIs.isMIAvailable()) { - vscode.commands.executeCommand("workbench.view.extension.micro-integrator"); - } else { - vscode.window.showInformationMessage( - "MI Extension is not available. Please install the Micro Integrator extension.", - "Install", - ).then((selection) => { - if (selection === "Install") { - vscode.commands.executeCommand("workbench.extensions.search", "@id:wso2.micro-integrator"); - } - }); - } - }), - ); -} diff --git a/workspaces/wi/wi-extension/src/extension.ts b/workspaces/wi/wi-extension/src/extension.ts deleted file mode 100644 index 016ca77bf32..00000000000 --- a/workspaces/wi/wi-extension/src/extension.ts +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import * as vscode from "vscode"; -import { ext } from "./extensionVariables"; -import { StateMachine } from "./stateMachine"; - -/** - * Activate the extension - */ -export async function activate(context: vscode.ExtensionContext): Promise { - ext.context = context; - ext.log("Activating WSO2 Integrator Extension"); - - try { - // Initialize state machine - this will handle everything: - // 1. Project type detection - // 2. Extension activation based on project type - // 3. Tree view activation - // 4. Command registration - // 5. Webview manager setup - StateMachine.initialize(); - - ext.log("WSO2 Integrator Extension activated successfully"); - } catch (error) { - ext.logError("Failed to activate WSO2 Integrator Extension", error as Error); - vscode.window.showErrorMessage( - `Failed to activate WSO2 Integrator Extension: ${error instanceof Error ? error.message : String(error)}`, - ); - } -} - -/** - * Deactivate the extension - */ -export function deactivate(): void { - ext.log("Deactivating WSO2 Integrator Extension"); -} diff --git a/workspaces/wi/wi-extension/src/extensionAPIs.ts b/workspaces/wi/wi-extension/src/extensionAPIs.ts deleted file mode 100644 index 4b8c5f8e7b1..00000000000 --- a/workspaces/wi/wi-extension/src/extensionAPIs.ts +++ /dev/null @@ -1,113 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import * as vscode from "vscode"; -import { EXTENSION_DEPENDENCIES } from "@wso2/wi-core"; -import type { BIExtensionAPI, MIExtensionAPI } from "@wso2/wi-core"; -import { ext } from "./extensionVariables"; - -/** - * Extension APIs manager - */ -export class ExtensionAPIs { - private biExtension: vscode.Extension | undefined; - private miExtension: vscode.Extension | undefined; - - /** - * Initialize extension APIs - */ - public async initialize(): Promise { - // Get BI extension - this.biExtension = vscode.extensions.getExtension(EXTENSION_DEPENDENCIES.BI); - - // Get MI extension - this.miExtension = vscode.extensions.getExtension(EXTENSION_DEPENDENCIES.MI); - } - - public activateBIExtension(): void { - if (this.biExtension && !this.biExtension.isActive) { - this.biExtension.activate().then( - () => { - ext.log("BI Extension activated"); - }, - (error) => { - ext.logError("Failed to activate BI extension", error as Error); - }, - ); - } - } - - public activateMIExtension(): void { - if (this.miExtension && !this.miExtension.isActive) { - this.miExtension.activate().then( - () => { - ext.log("MI Extension activated"); - }, - (error) => { - ext.logError("Failed to activate MI extension", error as Error); - }, - ); - } - } - - /** - * Check if BI extension is available - */ - public isBIAvailable(): boolean { - return this.biExtension !== undefined && this.biExtension.isActive; - } - - /** - * Check if MI extension is available - */ - public isMIAvailable(): boolean { - return this.miExtension !== undefined && this.miExtension.isActive; - } - - /** - * Get BI status - */ - public getBIStatus(): string { - if (!this.isBIAvailable() || !this.biExtension?.exports) { - return "unavailable"; - } - - try { - return this.biExtension.exports.getStatus(); - } catch (error) { - ext.logError("Failed to get BI status", error as Error); - return "error"; - } - } - - /** - * Get MI status - */ - public getMIStatus(): string { - if (!this.isMIAvailable() || !this.miExtension?.exports) { - return "unavailable"; - } - - try { - return this.miExtension.exports.getStatus(); - } catch (error) { - ext.logError("Failed to get MI status", error as Error); - return "error"; - } - } -} diff --git a/workspaces/wi/wi-extension/src/extensionVariables.ts b/workspaces/wi/wi-extension/src/extensionVariables.ts deleted file mode 100644 index 30df50529d3..00000000000 --- a/workspaces/wi/wi-extension/src/extensionVariables.ts +++ /dev/null @@ -1,59 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import * as vscode from "vscode"; - -/** - * Extension context wrapper - */ -class ExtensionVariables { - private _context: vscode.ExtensionContext | undefined; - private _outputChannel: vscode.OutputChannel | undefined; - - get context(): vscode.ExtensionContext { - if (!this._context) { - throw new Error("Extension context not initialized"); - } - return this._context; - } - - set context(value: vscode.ExtensionContext) { - this._context = value; - } - - get outputChannel(): vscode.OutputChannel { - if (!this._outputChannel) { - this._outputChannel = vscode.window.createOutputChannel("WSO2 Integrator"); - } - return this._outputChannel; - } - - public log(message: string): void { - this.outputChannel.appendLine(`[${new Date().toISOString()}] ${message}`); - } - - public logError(message: string, error?: Error): void { - const errorMsg = error ? `${message}: ${error.message}` : message; - this.outputChannel.appendLine(`[${new Date().toISOString()}] ERROR: ${errorMsg}`); - if (error?.stack) { - this.outputChannel.appendLine(error.stack); - } - } -} - -export const ext = new ExtensionVariables(); diff --git a/workspaces/wi/wi-extension/src/mi/utils.ts b/workspaces/wi/wi-extension/src/mi/utils.ts deleted file mode 100644 index 9313670e802..00000000000 --- a/workspaces/wi/wi-extension/src/mi/utils.ts +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import * as fs from 'fs'; -import * as path from 'path'; -import { ext } from '../extensionVariables'; - - -export async function checkIfMiProject(projectUri: string): Promise { - ext.log(`Detecting MI project in ${projectUri} - ${new Date().toLocaleTimeString()}`); - - try { - // Check for pom.xml files excluding node_modules directory - const pomFilePath = path.join(projectUri, 'pom.xml'); - if (fs.existsSync(pomFilePath)) { - const pomContent = await fs.promises.readFile(pomFilePath, 'utf-8'); - const isProject = pomContent.includes('integration-project'); - if (isProject) { - ext.log("MI project detected in " + projectUri); - return true; - } - } - - return false; - } catch (error) { - ext.logError('Failed to detect MI project', error as Error); - return false; - } -} diff --git a/workspaces/wi/wi-extension/src/rpc-managers/main/ballerinaLogger.ts b/workspaces/wi/wi-extension/src/rpc-managers/main/ballerinaLogger.ts deleted file mode 100644 index 5d552ba7292..00000000000 --- a/workspaces/wi/wi-extension/src/rpc-managers/main/ballerinaLogger.ts +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import * as vscode from 'vscode'; -import path from 'path'; -import os from 'os'; -import fs from 'fs'; -import { workspace } from 'vscode'; - -interface BallerinaPluginConfig extends vscode.WorkspaceConfiguration { - home?: string; - debugLog?: boolean; - classpath?: string; -} - -export const outputChannel = vscode.window.createOutputChannel("Ballerina"); -const logLevelDebug: boolean = getPluginConfig().get('debugLog') === true; - -function withNewLine(value: string) { - if (typeof value === 'string' && !value.endsWith('\n')) { - return value += '\n'; - } - return value; -} - -export function getPluginConfig(): BallerinaPluginConfig { - return workspace.getConfiguration('ballerina'); -} - -// This function will log the value to the Ballerina output channel only if debug log is enabled -export function debug(value: string): void { - const output = withNewLine(value); - console.log(output); - if (logLevelDebug) { - outputChannel.append(output); - } - persistDebugLogs(value); -} - -// This function will log the value to the Ballerina output channel -export function log(value: string): void { - const output = withNewLine(value); - console.log(output); - outputChannel.append(output); - persistDebugLogs(value); -} - -export function getOutputChannel() { - if (logLevelDebug) { - return outputChannel; - } -} - -/** - * Persist debug logs to a file, keeping logs for up to 10 days. - * Each day's logs are stored in a file named with the current date (YYYY-MM-DD.log). - * When more than 10 log files exist, delete the oldest one. - * Each log entry is appended to the corresponding day's file, prefixed with the current date and time. - */ -function persistDebugLogs(value: string): void { - try { - const homeDir = os.homedir(); - const logFolder = path.join(homeDir, '.ballerina', 'vscode-extension-logs'); - const date = new Date().toLocaleString(); - const logLine = `${date} ${value}`; - const output = withNewLine(logLine); - // Create destination folder if it doesn't exist - if (!fs.existsSync(logFolder)) { - fs.mkdirSync(logFolder, { recursive: true }); - } - // Create log file if it doesn't exist - const logFileDate = new Date().toISOString().split('T')[0]; - const fileName = `${logFileDate}.log`; - if (!fs.existsSync(path.join(logFolder, fileName))) { - fs.writeFileSync(path.join(logFolder, fileName), ''); - } - const logFilePath = path.join(logFolder, fileName); - fs.appendFileSync(logFilePath, output); - - // Remove the oldest log file if there are more than 10 log files - const logFiles = fs.readdirSync(logFolder); - if (logFiles.length > 10) { - const sortedFiles = logFiles.sort(); - fs.unlinkSync(path.join(logFolder, sortedFiles[0])); - } - } catch (error) { - // Silently fail to avoid disrupting the extension, but log to console - console.error('Failed to persist debug logs:', error); - } -} diff --git a/workspaces/wi/wi-extension/src/rpc-managers/main/migrate-integration.ts b/workspaces/wi/wi-extension/src/rpc-managers/main/migrate-integration.ts deleted file mode 100644 index 2e79dba19aa..00000000000 --- a/workspaces/wi/wi-extension/src/rpc-managers/main/migrate-integration.ts +++ /dev/null @@ -1,271 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { DownloadProgress, onDownloadProgress } from "@wso2/wi-core"; -import { exec } from "child_process"; -import { debug } from "./ballerinaLogger"; -import { RPCLayer } from "../../RPCLayer"; -import * as vscode from "vscode"; - -const PROGRESS_COMPLETE = 100; - -/** - * Executes the `bal tool pull` command and sends progress notifications to the webview client via RPC. - * Includes 5-minute timeout. - * - * @param migrationToolName The alias for the Ballerina tool to pull (e.g., "migrate-tibco", "migrate-mule"). - * @param version The version of the tool to pull (e.g., "1.1.1"). - * @returns A promise that resolves when the operation is complete or rejects on failure. - */ -export async function pullMigrationTool(migrationToolName: string, version: string): Promise { - // 1. Initial validation and command mapping - if (!migrationToolName) { - const errorMessage = "Migration tool name is required"; - return Promise.reject(new Error(errorMessage)); - } - - if (!version) { - const errorMessage = "Migration tool version is required"; - return Promise.reject(new Error(errorMessage)); - } - - const toolCommandSet = new Set(["migrate-tibco", "migrate-mule"]); - - if (!toolCommandSet.has(migrationToolName)) { - const errorMessage = `Unsupported migration tool: ${migrationToolName}`; - return Promise.reject(new Error(errorMessage)); - } - - // Get Ballerina extension instance - const ballerinaExt = vscode.extensions.getExtension('wso2.ballerina'); - if (!ballerinaExt) { - const errorMessage = "Ballerina extension not found"; - return Promise.reject(new Error(errorMessage)); - } - - const ballerinaCmd = ballerinaExt.exports.ballerinaExtInstance.getBallerinaCmd(); - const command = `${ballerinaCmd} tool pull ${migrationToolName}:${version}`; - debug(`Executing migration tool pull command: ${command}`); - - // 2. This function now returns a promise that wraps the exec lifecycle - return new Promise((resolve, reject) => { - // Helper to send notifications to the webview - const sendProgress = (progress: DownloadProgress) => { - RPCLayer._messengers.get("wi-webview")?.sendNotification( - onDownloadProgress, - { type: 'webview', webviewType: 'wso2IntegratorWelcome' }, - progress - ); - }; - - // Send initial progress update - sendProgress({ - message: "Initializing tool download...", - percentage: 0, - success: false, - step: 1, - }); - - const childProcess = exec(command, { - maxBuffer: 1024 * 1024, - timeout: 300000 // 5 minutes timeout - }); - - let accumulatedStdout = ""; - let progressReported = 0; - - // 3. Process the command's standard output with carriage return handling - childProcess.stdout?.on("data", (data: Buffer) => { - const output = data.toString(); - accumulatedStdout += output; - debug(`Tool pull stdout chunk: ${output.replace(/\r/g, '\\r').replace(/\n/g, '\\n')}`); - - // Handle carriage return progress updates - split by \r and take the last meaningful line - const lines = output.split('\r'); - const lastLine = lines[lines.length - 1] || lines[lines.length - 2] || ''; - - // Case A: Tool is already installed (high-priority check) - if (accumulatedStdout.includes("is already available locally")) { - if (progressReported < PROGRESS_COMPLETE) { - progressReported = PROGRESS_COMPLETE; - sendProgress({ - message: "Tool is already installed.", - percentage: PROGRESS_COMPLETE, - success: true, - step: 3, - }); - } - } - // Case B: Download is complete (check for success message) - else if (accumulatedStdout.includes("pulled from central successfully")) { - if (progressReported < PROGRESS_COMPLETE) { - progressReported = PROGRESS_COMPLETE; - sendProgress({ - message: "Download complete. Finalizing...", - percentage: PROGRESS_COMPLETE, - success: false, // Not fully successful until the process closes with code 0 - step: 2, - }); - } - } - // Case C: Parse the percentage from the progress bar output - else { - // Look for percentage in the current line (handles carriage return updates) - const percentageMatch = lastLine.match(/\s+(\d{1,3})\s*%/); - - if (percentageMatch) { - const currentPercentage = parseInt(percentageMatch[1], 10); - - // Update progress if it's a valid number and moving forward - if (!isNaN(currentPercentage) && currentPercentage > progressReported && currentPercentage <= PROGRESS_COMPLETE) { - progressReported = currentPercentage; - - // Extract download info from progress line if available - const sizeMatch = lastLine.match(/(\d+)\/(\d+)\s+KB/); - let message = `Downloading... ${currentPercentage}%`; - - if (sizeMatch) { - const downloaded = parseInt(sizeMatch[1], 10); - const total = parseInt(sizeMatch[2], 10); - message = `Downloading... ${currentPercentage}% (${Math.round(downloaded / 1024)}/${Math.round(total / 1024)} MB)`; - } - - sendProgress({ - message, - percentage: currentPercentage, - success: false, - step: 2, - }); - } - } - // Also check for any percentage in the accumulated output as fallback - else { - const allPercentageMatches = output.match(/(\d{1,3})\s*%/g); - if (allPercentageMatches) { - const lastMatch = allPercentageMatches[allPercentageMatches.length - 1]; - const currentPercentage = parseInt(lastMatch, 10); - - if (!isNaN(currentPercentage) && currentPercentage > progressReported && currentPercentage <= PROGRESS_COMPLETE) { - progressReported = currentPercentage; - sendProgress({ - message: `Downloading... ${currentPercentage}%`, - percentage: currentPercentage, - success: false, - step: 2, - }); - } - } - } - } - }); - - // 4. Handle standard error output with improved filtering - childProcess.stderr?.on("data", (data: Buffer) => { - const errorOutput = data.toString().trim(); - debug(`Tool pull stderr: ${errorOutput}`); - - // Filter out non-critical messages that shouldn't cause failure - const nonCriticalPatterns = [ - /is already active/i, - /warning:/i, - /deprecated/i - ]; - - const isNonCritical = nonCriticalPatterns.some(pattern => pattern.test(errorOutput)); - - if (isNonCritical) { - debug(`Ignoring non-critical stderr: ${errorOutput}`); - return; - } - - // Only treat as error if it's a real error message - if (errorOutput.length > 0) { - sendProgress({ - message: `Error: ${errorOutput}`, - success: false, - step: -1, - }); - reject(new Error(errorOutput)); - } - }); - - // 5. Handle the definitive end of the process - childProcess.on("close", (code) => { - debug(`Tool pull command exited with code ${code}`); - - // Success conditions: code 0, or code 1 with "already available" message - const isAlreadyInstalled = accumulatedStdout.includes("is already available locally"); - const isSuccessfulDownload = accumulatedStdout.includes("pulled from central successfully") || - accumulatedStdout.includes("successfully set as the active version"); - - if (code === 0 || (code === 1 && isAlreadyInstalled)) { - let finalMessage: string; - - if (isAlreadyInstalled) { - finalMessage = `Tool '${migrationToolName}' is already installed.`; - } else if (isSuccessfulDownload) { - finalMessage = `Successfully pulled '${migrationToolName}'.`; - } else { - finalMessage = `Tool pull completed with code ${code}. Please check the logs for more details.`; - } - - sendProgress({ - message: finalMessage, - percentage: PROGRESS_COMPLETE, - success: true, - step: 3, - }); - resolve(); - } else { - const errorMessage = `Tool pull failed with exit code ${code}. Check logs for details.`; - sendProgress({ - message: errorMessage, - success: false, - step: -1, - }); - reject(new Error(errorMessage)); - } - }); - - // Handle process execution errors (e.g., command not found) - childProcess.on("error", (error) => { - debug(`Tool pull process error: ${error.message}`); - - const errorMessage = `Failed to execute command: ${error.message}`; - sendProgress({ - message: errorMessage, - success: false, - step: -1, - }); - reject(new Error(errorMessage)); - }); - - // Handle timeout from exec options - childProcess.on("timeout", () => { - debug("Tool pull process timed out after 5 minutes"); - - const errorMessage = "Download timed out after 5 minutes"; - sendProgress({ - message: errorMessage, - success: false, - step: -1, - }); - reject(new Error("Migration tool pull timed out after 5 minutes")); - }); - }); -} diff --git a/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-handler.ts b/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-handler.ts deleted file mode 100644 index bb7cbcfc651..00000000000 --- a/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-handler.ts +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - * THIS FILE INCLUDES AUTO GENERATED CODE - */ -import { - openBiExtension, - openMiExtension, - runCommand, - selectFileOrDirPath, - selectFileOrFolderPath, - getWorkspaceRoot, - getConfiguration, - getSupportedMIVersionsHigherThan, - getSubFolderNames, - askProjectDirPath, - createMiProject, - fetchSamplesFromGithub, - downloadSelectedSampleFromGithub, - createBIProject, - getMigrationTools, - migrateProject, - pullMigrationTool, - importIntegration, - showErrorMessage, - RunCommandRequest, - FileOrDirRequest, - GetConfigurationRequest, - GetSubFoldersRequest, - CreateMiProjectRequest, - SampleDownloadRequest, - BIProjectRequest, - MigrateRequest, - PullMigrationToolRequest, - ImportIntegrationRPCRequest, - ShowErrorMessageRequest -} from "@wso2/wi-core"; -import { Messenger } from "vscode-messenger"; -import { MainRpcManager } from "./rpc-manager"; - -export function registerMainRpcHandlers(messenger: Messenger) { - const rpcManger = new MainRpcManager(); - messenger.onNotification(openBiExtension, () => rpcManger.openBiExtension()); - messenger.onNotification(openMiExtension, () => rpcManger.openMiExtension()); - messenger.onRequest(runCommand, (args: RunCommandRequest) => rpcManger.runCommand(args)); - messenger.onRequest(selectFileOrDirPath, (args: FileOrDirRequest) => rpcManger.selectFileOrDirPath(args)); - messenger.onRequest(selectFileOrFolderPath, () => rpcManger.selectFileOrFolderPath()); - messenger.onRequest(getWorkspaceRoot, () => rpcManger.getWorkspaceRoot()); - messenger.onRequest(getConfiguration, (args: GetConfigurationRequest) => rpcManger.getConfiguration(args)); - messenger.onRequest(getSupportedMIVersionsHigherThan, (version: string) => rpcManger.getSupportedMIVersionsHigherThan(version)); - messenger.onRequest(getSubFolderNames, (args: GetSubFoldersRequest) => rpcManger.getSubFolderNames(args)); - messenger.onRequest(askProjectDirPath, () => rpcManger.askProjectDirPath()); - messenger.onRequest(createMiProject, (args: CreateMiProjectRequest) => rpcManger.createMiProject(args)); - messenger.onRequest(fetchSamplesFromGithub, () => rpcManger.fetchSamplesFromGithub()); - messenger.onNotification(downloadSelectedSampleFromGithub, (args: SampleDownloadRequest) => rpcManger.downloadSelectedSampleFromGithub(args)); - messenger.onRequest(createBIProject, (args: BIProjectRequest) => rpcManger.createBIProject(args)); - messenger.onRequest(getMigrationTools, () => rpcManger.getMigrationTools()); - messenger.onRequest(migrateProject, (args: MigrateRequest) => rpcManger.migrateProject(args)); - messenger.onRequest(pullMigrationTool, (args: PullMigrationToolRequest) => rpcManger.pullMigrationTool(args)); - messenger.onRequest(importIntegration, (args: ImportIntegrationRPCRequest) => rpcManger.importIntegration(args)); - messenger.onRequest(showErrorMessage, (args: ShowErrorMessageRequest) => rpcManger.showErrorMessage(args)); -} diff --git a/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts b/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts deleted file mode 100644 index dba01257c7f..00000000000 --- a/workspaces/wi/wi-extension/src/rpc-managers/main/rpc-manager.ts +++ /dev/null @@ -1,325 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - * THIS FILE INCLUDES AUTO GENERATED CODE - */ -import { - RunCommandRequest, - RunCommandResponse, - FileOrDirRequest, - WorkspaceRootResponse, - WIVisualizerAPI, - FileOrDirResponse, - GetConfigurationRequest, - GetConfigurationResponse, - GetSubFoldersRequest, - GetSubFoldersResponse, - ProjectDirResponse, - GetSupportedMIVersionsResponse, - CreateMiProjectRequest, - CreateMiProjectResponse, - GettingStartedData, - GettingStartedCategory, - GettingStartedSample, - SampleDownloadRequest, - BIProjectRequest, - GetMigrationToolsResponse, - MigrateRequest, - ImportIntegrationRPCRequest, - ImportIntegrationResponse, - ImportIntegrationRequest, - ShowErrorMessageRequest -} from "@wso2/wi-core"; -import { commands, window, workspace, Uri, MarkdownString, extensions } from "vscode"; -import { askFileOrFolderPath, askFilePath, askProjectPath, BALLERINA_INTEGRATOR_ISSUES_URL, getUsername, handleOpenFile, sanitizeName } from "./utils"; -import * as fs from "fs"; -import * as path from "path"; -import axios from "axios"; -import { pullMigrationTool } from "./migrate-integration"; - -export class MainRpcManager implements WIVisualizerAPI { - constructor(private projectUri?: string) { } - - async openBiExtension(): Promise { - commands.executeCommand("wso2.integrator.openBIIntegration"); - } - - async openMiExtension(): Promise { - commands.executeCommand("wso2.integrator.openMIIntegration"); - } - - async runCommand(props: RunCommandRequest): Promise { - return await commands.executeCommand("wso2.integrator.runCommand", props); - } - - async selectFileOrDirPath(params: FileOrDirRequest): Promise { - return new Promise(async (resolve) => { - if (params.isFile) { - const selectedFile = await askFilePath(); - if (!selectedFile || selectedFile.length === 0) { - window.showErrorMessage('A file must be selected'); - resolve({ path: "" }); - } else { - const filePath = selectedFile[0].fsPath; - resolve({ path: filePath }); - } - } else { - const selectedDir = await askProjectPath(); - if (!selectedDir || selectedDir.length === 0) { - window.showErrorMessage('A folder must be selected'); - resolve({ path: "" }); - } else { - const dirPath = selectedDir[0].fsPath; - resolve({ path: dirPath }); - } - } - }); - } - - async selectFileOrFolderPath(): Promise { - return new Promise(async (resolve) => { - const selectedFileOrFolder = await askFileOrFolderPath(); - if (!selectedFileOrFolder || selectedFileOrFolder.length === 0) { - window.showErrorMessage('A file or folder must be selected'); - resolve({ path: "" }); - } else { - const fileOrFolderPath = selectedFileOrFolder[0].fsPath; - resolve({ path: fileOrFolderPath }); - } - }); - } - - async getWorkspaceRoot(): Promise { - return new Promise(async (resolve) => { - const workspaceFolders = workspace.workspaceFolders; - resolve(workspaceFolders ? { path: workspaceFolders[0].uri.fsPath } : { path: "" }); - }); - } - - async getConfiguration(params: GetConfigurationRequest): Promise { - return new Promise(async (resolve) => { - const configValue = workspace.getConfiguration().get(params.section); - resolve({ value: configValue }); - }); - } - - async getSupportedMIVersionsHigherThan(version: string): Promise { - return new Promise(async (resolve) => { - // TODO: Implement the actual function from ballerina-core - // For now, return a placeholder - const versions = ["4.2.0", "4.1.0", "4.0.0"]; - resolve({ versions }); - }); - } - - async getSubFolderNames(params: GetSubFoldersRequest): Promise { - return new Promise(async (resolve) => { - const { path: folderPath } = params; - const subFolders: string[] = []; - - if (!folderPath || folderPath.trim() === '') { - resolve({ folders: subFolders }); - return; - } - - try { - const subItems = fs.readdirSync(folderPath, { withFileTypes: true }); - for (const item of subItems) { - if (item.isDirectory()) { - subFolders.push(item.name); - } - } - } catch (error) { - console.error("Error reading subfolder names:", error); - } - resolve({ folders: subFolders }); - }); - } - - async askProjectDirPath(): Promise { - return new Promise(async (resolve) => { - const selectedDir = await askProjectPath(); - if (!selectedDir || selectedDir.length === 0) { - window.showErrorMessage('A folder must be selected to create project'); - resolve({ path: "" }); - } else { - const parentDir = selectedDir[0].fsPath; - resolve({ path: parentDir }); - } - }); - } - - async createMiProject(params: CreateMiProjectRequest): Promise { - return new Promise(async (resolve, reject) => { - try { - console.log("Creating MI project with params:", params); - - const miCommandParams = { - name: params.name, - path: path.join(params.directory, params.name), - scope: "user", - open: params.open - }; - - const result = await commands.executeCommand("MI.project-explorer.create-project", miCommandParams); - - if (result) { - resolve(result as CreateMiProjectResponse); - } else { - resolve({ filePath: '' }); - } - } catch (error) { - console.error("Error creating MI project:", error); - const errorMessage = error instanceof Error ? error.message : String(error); - window.showErrorMessage(`Failed to create MI project: ${errorMessage}`); - reject(error); - } - }); - } - - async fetchSamplesFromGithub(): Promise { - return new Promise(async (resolve) => { - const url = 'https://mi-connectors.wso2.com/samples/info.json'; - try { - const { data } = await axios.get(url); - const samples = data.Samples; - const categories = data.categories; - - let categoriesList: GettingStartedCategory[] = []; - for (let i = 0; i < categories.length; i++) { - const cat: GettingStartedCategory = { - id: categories[i][0], - title: categories[i][1], - icon: categories[i][2] - }; - categoriesList.push(cat); - } - let sampleList: GettingStartedSample[] = []; - for (let i = 0; i < samples.length; i++) { - const sample: GettingStartedSample = { - category: samples[i][0], - priority: samples[i][1], - title: samples[i][2], - description: samples[i][3], - zipFileName: samples[i][4], - isAvailable: samples[i][5] - }; - sampleList.push(sample); - } - const gettingStartedData: GettingStartedData = { - categories: categoriesList, - samples: sampleList - }; - resolve(gettingStartedData); - - } catch (error) { - console.error('Error fetching samples:', error); - resolve({ - categories: [], - samples: [] - }); - } - }); - } - - downloadSelectedSampleFromGithub(params: SampleDownloadRequest): void { - const url = 'https://mi-connectors.wso2.com/samples/samples/'; - const workspaceFolders = workspace.workspaceFolders; - const projectUri = this.projectUri ?? (workspaceFolders ? workspaceFolders[0].uri.fsPath : ""); - handleOpenFile(projectUri, params.zipFileName, url); - } - - private getLangClient() { - const ballerinaExt = extensions.getExtension('wso2.ballerina'); - if (!ballerinaExt) { - throw new Error('Ballerina extension is not installed'); - } - if (!ballerinaExt.isActive) { - throw new Error('Ballerina extension is not activated yet'); - } - const langClient = ballerinaExt.exports.ballerinaExtInstance.langClient; - return langClient as any; - } - - async getMigrationTools(): Promise { - return this.getLangClient().getMigrationTools(); - } - - async createBIProject(params: BIProjectRequest): Promise { - return new Promise(async (resolve, reject) => { - try { - const result = await commands.executeCommand('BI.project.createBIProjectPure', params); - resolve(); - } catch (error) { - console.error("Error creating BI project:", error); - const errorMessage = error instanceof Error ? error.message : String(error); - window.showErrorMessage(`Failed to create BI project: ${errorMessage}`); - reject(error); - } - }); - } - - async migrateProject(params: MigrateRequest): Promise { - return new Promise(async (resolve, reject) => { - try { - const result = await commands.executeCommand('BI.project.createBIProjectMigration', params); - resolve(); - } catch (error) { - console.error("Error creating BI project:", error); - const errorMessage = error instanceof Error ? error.message : String(error); - window.showErrorMessage(`Failed to create BI project: ${errorMessage}`); - reject(error); - } - }); - } - - async pullMigrationTool(args: { toolName: string; version: string }): Promise { - try { - await pullMigrationTool(args.toolName, args.version); - } catch (error) { - console.error(`Failed to pull migration tool '${args.toolName}' version '${args.version}':`, error); - throw error; - } - } - - async importIntegration(params: ImportIntegrationRPCRequest): Promise { - const orgName = getUsername(); - const langParams: ImportIntegrationRequest = { - orgName: orgName, - packageName: sanitizeName(params.packageName), - sourcePath: params.sourcePath, - parameters: params.parameters, - }; - const langClient = this.getLangClient(); - langClient.registerMigrationToolCallbacks(); - switch (params.commandName) { - case "migrate-tibco": - return langClient.importTibcoToBI(langParams); - case "migrate-mule": - return langClient.importMuleToBI(langParams); - default: - console.error(`Unsupported integration type: ${params.commandName}`); - throw new Error(`Unsupported integration type: ${params.commandName}`); - } - } - - async showErrorMessage(params: ShowErrorMessageRequest): Promise { - const messageWithLink = new MarkdownString(params.message); - messageWithLink.appendMarkdown(`\n\nPlease [create an issue](${BALLERINA_INTEGRATOR_ISSUES_URL}) if the issue persists.`); - window.showErrorMessage(messageWithLink.value); - } -} diff --git a/workspaces/wi/wi-extension/src/rpc-managers/main/utils.ts b/workspaces/wi/wi-extension/src/rpc-managers/main/utils.ts deleted file mode 100644 index a5e5e648664..00000000000 --- a/workspaces/wi/wi-extension/src/rpc-managers/main/utils.ts +++ /dev/null @@ -1,237 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { commands, debug, Progress, ProgressLocation, Uri, window, workspace } from "vscode"; -import * as os from 'os'; -import path from "path"; -import * as fs from 'fs'; -import * as unzipper from 'unzipper'; -import axios from "axios"; -import { DownloadProgress, onDownloadProgress } from "@wso2/wi-core"; -import { RPCLayer } from "../../RPCLayer"; - -interface ProgressMessage { - message: string; - increment?: number; -} - -export const BALLERINA_INTEGRATOR_ISSUES_URL = "https://github.com/wso2/product-ballerina-integrator/issues"; - -export async function askFilePath() { - return await window.showOpenDialog({ - canSelectFiles: true, - canSelectFolders: false, - canSelectMany: false, - defaultUri: Uri.file(os.homedir()), - filters: { - 'Files': ['yaml', 'json', 'yml', 'graphql'] - }, - title: "Select a file", - }); -} - -export async function askProjectPath() { - return await window.showOpenDialog({ - canSelectFiles: false, - canSelectFolders: true, - canSelectMany: false, - defaultUri: Uri.file(os.homedir()), - title: "Select a folder" - }); -} - -export async function askFileOrFolderPath() { - return await window.showOpenDialog({ - canSelectFiles: true, - canSelectFolders: true, - canSelectMany: false, - defaultUri: Uri.file(os.homedir()), - title: "Select a file or folder" - }); -} - -export async function handleOpenFile(projectUri: string, sampleName: string, repoUrl: string) { - const rawFileLink = repoUrl + sampleName + '/' + sampleName + '.zip'; - const defaultDownloadsPath = path.join(os.homedir(), 'Downloads'); // Construct the default downloads path - const pathFromDialog = await selectFileDownloadPath(); - if (pathFromDialog === "") { - return; - } - const selectedPath = pathFromDialog === "" ? defaultDownloadsPath : pathFromDialog; - const filePath = path.join(selectedPath, sampleName + '.zip'); - let isSuccess = false; - - if (fs.existsSync(filePath)) { - // already downloaded - isSuccess = true; - } else { - await window.withProgress({ - location: ProgressLocation.Notification, - title: 'Downloading file', - cancellable: true - }, async (progress, cancellationToken) => { - - let cancelled: boolean = false; - cancellationToken.onCancellationRequested(async () => { - cancelled = true; - }); - - try { - await handleDownloadFile(projectUri, rawFileLink, filePath, progress, cancelled); - isSuccess = true; - return; - } catch (error) { - window.showErrorMessage(`Error while downloading the file: ${error}`); - } - }); - } - - if (isSuccess) { - const successMsg = `The Integration sample file has been downloaded successfully to the following directory: ${filePath}.`; - const zipReadStream = fs.createReadStream(filePath); - if (fs.existsSync(path.join(selectedPath, sampleName))) { - // already extracted - let uri = Uri.file(path.join(selectedPath, sampleName)); - commands.executeCommand("vscode.openFolder", uri, true); - return; - } - zipReadStream.pipe(unzipper.Parse()).on("entry", function (entry) { - var isDir = entry.type === "Directory"; - var fullpath = path.join(selectedPath, entry.path); - var directory = isDir ? fullpath : path.dirname(fullpath); - if (!fs.existsSync(directory)) { - fs.mkdirSync(directory, { recursive: true }); - } - if (!isDir) { - entry.pipe(fs.createWriteStream(fullpath)); - } - }).on("close", () => { - console.log("Extraction complete!"); - window.showInformationMessage('Where would you like to open the project?', - { modal: true }, - 'Current Window', - 'New Window' - ).then(selection => { - if (selection === "Current Window") { - const folderUri = Uri.file(path.join(selectedPath, sampleName)); - const workspaceFolders = workspace.workspaceFolders || []; - if (!workspaceFolders.some(folder => folder.uri.fsPath === folderUri.fsPath)) { - workspace.updateWorkspaceFolders(workspaceFolders.length, 0, { uri: folderUri }); - } - } else if (selection === "New Window") { - commands.executeCommand('vscode.openFolder', Uri.file(path.join(selectedPath, sampleName))); - } - }); - }); - window.showInformationMessage( - successMsg, - ); - } -} - -async function selectFileDownloadPath(): Promise { - const folderPath = await window.showOpenDialog({ title: 'Sample download directory', canSelectFolders: true, canSelectFiles: false, openLabel: 'Select Folder' }); - if (folderPath && folderPath.length > 0) { - const newlySelectedFolder = folderPath[0].fsPath; - return newlySelectedFolder; - } - return ""; -} - -async function handleDownloadFile(projectUri: string, rawFileLink: string, defaultDownloadsPath: string, progress: Progress, cancelled: boolean) { - const handleProgress = (progressPercentage: any) => { - progress.report({ message: "Downloading file...", increment: progressPercentage }); - }; - try { - await downloadFile(projectUri, rawFileLink, defaultDownloadsPath, handleProgress); - } catch (error) { - window.showErrorMessage(`Failed to download file: ${error}`); - } - progress.report({ message: "Download finished" }); -} - -async function downloadFile(projectUri: string, url: string, filePath: string, progressCallback?: (downloadProgress: DownloadProgress) => void) { - const writer = fs.createWriteStream(filePath); - let totalBytes = 0; - try { - const response = await axios.get(url, { - responseType: 'stream', - headers: { - "User-Agent": "Mozilla/5.0" - }, - onDownloadProgress: (progressEvent) => { - totalBytes = progressEvent.total!; - const formatSize = (sizeInBytes: number) => { - const sizeInKB = sizeInBytes / 1024; - if (sizeInKB < 1024) { - return `${Math.floor(sizeInKB)} KB`; - } else { - return `${Math.floor(sizeInKB / 1024)} MB`; - } - }; - const progress: DownloadProgress = { - percentage: Math.round((progressEvent.loaded * 100) / totalBytes), - downloadedSize: progressEvent.loaded, - totalSize: totalBytes, - success: false, - message: `Downloading... ${Math.round((progressEvent.loaded * 100) / totalBytes)}%` - }; - if (progressCallback) { - progressCallback(progress); - } - // Notify the visualizer - RPCLayer._messengers.get("wi-webview")?.sendNotification( - onDownloadProgress, - { type: 'webview', webviewType: 'wso2IntegratorWelcome' }, - progress - ); - } - }); - response.data.pipe(writer); - await new Promise((resolve, reject) => { - writer.on('finish', () => { - writer.close(); - resolve(); - }); - - writer.on('error', (error) => { - reject(error); - }); - }); - } catch (error) { - window.showErrorMessage(`Error while downloading the file: ${error}`); - throw error; - } -} - -export function sanitizeName(name: string): string { - return name.replace(/[^a-z0-9]_./gi, '_').toLowerCase(); // Replace invalid characters with underscores -} - -export function getUsername(): string { - // Get current username from the system across different OS platforms - let username: string; - if (process.platform === 'win32') { - // Windows - username = process.env.USERNAME || 'myOrg'; - } else { - // macOS and Linux - username = process.env.USER || 'myOrg'; - } - return username; -} diff --git a/workspaces/wi/wi-extension/src/stateMachine.ts b/workspaces/wi/wi-extension/src/stateMachine.ts deleted file mode 100644 index ed26c3f5b16..00000000000 --- a/workspaces/wi/wi-extension/src/stateMachine.ts +++ /dev/null @@ -1,258 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { assign, createMachine, interpret } from 'xstate'; -import * as vscode from 'vscode'; -import { CONTEXT_KEYS } from '@wso2/wi-core'; -import { ext } from './extensionVariables'; -import { fetchProjectInfo, ProjectInfo } from './bi/utils'; -import { checkIfMiProject } from './mi/utils'; -import { WebviewManager } from './webviewManager'; -import { ExtensionAPIs } from './extensionAPIs'; -import { registerCommands } from './commands'; - -export enum ProjectType { - BI_BALLERINA = 'WSO2: BI', - MI = 'WSO2: MI', - NONE = 'NONE' -} - -interface MachineContext { - projectType: ProjectType; - isBI?: boolean; - isBallerina?: boolean; - isMultiRoot?: boolean; - isMI?: boolean; - extensionAPIs: ExtensionAPIs; - webviewManager?: WebviewManager; - mode: ProjectType; -} - -/** - * Get the default integrator mode from configuration - */ -function getDefaultIntegratorMode(): ProjectType { - const configValue = vscode.workspace.getConfiguration("wso2-integrator").get("integrator.defaultIntegrator"); - - // Map string config values to ProjectType enum - switch (configValue) { - case 'WSO2: BI': - return ProjectType.BI_BALLERINA; - case 'WSO2: MI': - return ProjectType.MI; - default: - return ProjectType.NONE; - } -} - -const stateMachine = createMachine({ - /** @xstate-layout N4IgpgJg5mDOIC5RilADgGwIYDsAuAdAJY5F5FYZEBeYAxBAPY5jE4BujA1qwMYAWYXlwAKAJ0YArIXgDaABgC6iUGkawyRZipAAPRACZ5ANgLyArABZjADgDMNmwYDsBp3YA0IAJ6IAjBYEAJwhQTZ+xs7GbpE2AL5xXijo2PhsmpQ09GBiEmIEmFh4AGaMYgC2BAJCohLSvHJKOmoa5NpIeoZB8gTGls5+lpaDfnZDds5evggG5s4EdvKjfn4h5qsmlglJqIVpaHUyACJgeDKQdArKHS2a7aD6COYGU4gD893RQQHOzmFW23Au1ShAAMgBlACSpDwDGYrBInB4BGSezBUJhCERjF4RS0OCuV2a6juOB0jzsdiCBBs3QGFgm5lpg1eCGMEQI-WMTMWziWQQMxkBqJBBAh0LIdByeQK2BKZUqItw6IleCxHBxeOYhKaNxJbTJHQpVJpdIC5kZzMsrL51MsBiCAzsfSCdis5mFwOVBDEYCwEG8BHYRDAAHcAEp+gN0ADyIgAogA5AD6ADVIfGAOpEvWtfHkxA2cx2ynOZ3mKwRe2s8x9AiDB1+WnyWkDLaJIEpb2+-2B4NhgCqaAgRXoTBYbCRrCVaR7AaDIdDQ5HZ3VnFxBp111U+vzRsLBj8BGcTICDtdxnk1p8iH6dgIbnkjMsdgMlMsV4SHZwjAgcB0M54MSeb3J0CAALR+PMizrMYQSWI6fLOI4rKQSsD7yM4L4vrMfizPIBiel2aQkBkVC0MBpIFggYymqMtK0valLwayER2jY8jwXMlaCtyRFogUhwNCcZwNJAlEGtRiy9PB9gWARDqHi8N4QW+x6YS+rjyJh2m2B6HaAWKGJkBJe4PP4-RmEWQRwRWd4WsYrJwfeH7RMhxhuieQT6TsxGEHO0w7iBhrmWyZYPosl6eX4cycayDjmMeHEOBMdijJYjj8aKAULmGka9qZoGPK4R5viYT5zDFto1n8D42Oy7KrK43xZd2UZ9ouy6joVIVgeadrctpzrGB5ArKdMFY9JYzz2OYnFNnBzitWkEBELAWAAEYYOJuZUfuTzfMe3lFtNtYEUE8UGJYGGRNYHkce6X5xEAA */ - id: 'wi', - initial: 'initialize', - predictableActionArguments: true, - context: { - projectType: ProjectType.NONE, - extensionAPIs: new ExtensionAPIs(), - mode: getDefaultIntegratorMode() - }, - states: { - initialize: { - invoke: { - src: detectProjectType, - onDone: [ - { - target: 'activateExtensions', - actions: assign({ - projectType: (context, event) => event.data.projectType, - isBI: (context, event) => event.data.isBI, - isBallerina: (context, event) => event.data.isBallerina, - isMultiRoot: (context, event) => event.data.isMultiRoot, - isMI: (context, event) => event.data.isMI - }) - }, - ], - onError: { - target: 'disabled' - } - } - }, - activateExtensions: { - invoke: { - src: activateExtensionsBasedOnProjectType, - onDone: { - target: 'ready' - }, - onError: { - target: 'disabled' - } - } - }, - ready: { - entry: "activateBasedOnProjectType", - on: { - UPDATE_MODE: { - actions: assign({ - mode: (context, event: any) => { - ext.log(`Mode updated in context: ${event.mode}`); - return event.mode; - } - }) - } - } - }, - disabled: { - // Project type could not be detected or no known project - entry: "showWelcomeScreen", - on: { - UPDATE_MODE: { - actions: assign({ - mode: (context, event: any) => { - ext.log(`Mode updated in context: ${event.mode}`); - return event.mode; - } - }) - } - } - }, - } -}, { - actions: { - activateBasedOnProjectType: (context, event) => { - ext.log(`Activating for project type: ${context.projectType}`); - - if (context.projectType === ProjectType.BI_BALLERINA) { - vscode.commands.executeCommand('setContext', 'WI.projectType', 'bi'); - } else if (context.projectType === ProjectType.MI) { - ext.log('MI project detected - MI tree view would be activated here'); - vscode.commands.executeCommand('setContext', 'WI.projectType', 'mi'); - } else { - // No known project type, show welcome screen - showWelcomeScreen(context); - } - }, - showWelcomeScreen: (context, event) => { - showWelcomeScreen(context); - } - } -}); - -async function activateExtensionsBasedOnProjectType(context: MachineContext): Promise { - ext.log(`Activating extensions for project type: ${context.projectType}`); - - // Initialize extension APIs and activate appropriate extensions based on project type - if (context.projectType === ProjectType.BI_BALLERINA) { - // Activate only BI extension for Ballerina projects - ext.log('Initializing BI extension for Ballerina project'); - await context.extensionAPIs.initialize(); - } else if (context.projectType === ProjectType.MI) { - // Activate only MI extension for MI projects - ext.log('Initializing MI extension for MI project'); - await context.extensionAPIs.initialize(); - } - - // Set context keys for available extensions - await vscode.commands.executeCommand("setContext", CONTEXT_KEYS.BI_AVAILABLE, context.extensionAPIs.isBIAvailable()); - await vscode.commands.executeCommand("setContext", CONTEXT_KEYS.MI_AVAILABLE, context.extensionAPIs.isMIAvailable()); - - // Create webview manager - context.webviewManager = new WebviewManager(context.extensionAPIs); - ext.context.subscriptions.push({ - dispose: () => context.webviewManager?.dispose(), - }); - - // Register commands - registerCommands(ext.context, context.webviewManager, context.extensionAPIs); - - ext.log('Extensions activated successfully'); -} - -async function detectProjectType(): Promise<{ - projectType: ProjectType; -}> { - const workspaceRoot = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath; - - // Check if it's an MI project - const isMiProject = workspaceRoot ? await checkIfMiProject(workspaceRoot) : false; - - if (isMiProject) { - ext.log('Detected MI project'); - return { - projectType: ProjectType.MI - }; - } - - // Check for BI/Ballerina project - const projectInfo: ProjectInfo = fetchProjectInfo(); - const ballerinaExt = vscode.extensions.getExtension('wso2.ballerina'); - - if (projectInfo.isBallerina && ballerinaExt) { - ext.log('Detected BI/Ballerina project'); - - return { - projectType: ProjectType.BI_BALLERINA, - }; - } - - ext.log('No known project type detected'); - return { - projectType: ProjectType.NONE - }; -} - -function showWelcomeScreen(context: MachineContext): void { - if (!context.webviewManager) { - const extensionAPIs = context.extensionAPIs || new ExtensionAPIs(); - const webviewManager = new WebviewManager(extensionAPIs); - context.webviewManager = webviewManager; - - ext.context.subscriptions.push({ - dispose: () => webviewManager.dispose(), - }); - } - - context.webviewManager.showWelcome(); -} - -// Create a service to interpret the machine -export const stateService = interpret(stateMachine); - -// Define your API as functions -export const StateMachine = { - initialize: () => { - ext.log('Starting state machine'); - stateService.start(); - - // Listen for configuration changes - const configChangeDisposable = vscode.workspace.onDidChangeConfiguration((event) => { - if (event.affectsConfiguration('wso2-integrator.integrator.defaultIntegrator')) { - const newMode = getDefaultIntegratorMode(); - ext.log(`Configuration changed: defaultIntegrator = ${newMode}`); - - // Update the state machine context - stateService.send({ - type: 'UPDATE_MODE', - mode: newMode - }); - } - }); - - // Register disposable - ext.context.subscriptions.push(configChangeDisposable); - }, - getContext: () => stateService.getSnapshot().context -}; diff --git a/workspaces/wi/wi-extension/src/webviewManager.ts b/workspaces/wi/wi-extension/src/webviewManager.ts deleted file mode 100644 index 1ce89c31d40..00000000000 --- a/workspaces/wi/wi-extension/src/webviewManager.ts +++ /dev/null @@ -1,259 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import * as vscode from "vscode"; -import { ViewType } from "@wso2/wi-core"; -import { ExtensionAPIs } from "./extensionAPIs"; -import { ext } from "./extensionVariables"; -import { Uri } from "vscode"; -import path from "path"; -import { RPCLayer } from "./RPCLayer"; - -/** - * Webview manager for WSO2 Integrator - */ -export class WebviewManager { - private currentPanel: vscode.WebviewPanel | undefined; - private currentViewType: ViewType | undefined; - - constructor(private extensionAPIs: ExtensionAPIs) { } - - /** - * Show webview with specified type - */ - public show(viewType: ViewType = ViewType.WELCOME): void { - const columnToShowIn = vscode.window.activeTextEditor - ? vscode.window.activeTextEditor.viewColumn - : undefined; - - // If we already have a panel, update view type and reveal it - if (this.currentPanel) { - this.currentViewType = viewType; - this.currentPanel.reveal(columnToShowIn); - return; - } - - // Create new panel - const panelTitle = this.getPanelTitle(viewType); - this.currentPanel = vscode.window.createWebviewPanel( - "wso2IntegratorWelcome", - panelTitle, - columnToShowIn || vscode.ViewColumn.One, - { - enableScripts: true, - retainContextWhenHidden: true, - localResourceRoots: [ - vscode.Uri.joinPath(ext.context.extensionUri, "dist"), - vscode.Uri.joinPath(ext.context.extensionUri, "resources"), - ], - }, - ); - - this.currentViewType = viewType; - - // Set the webview's html content - this.currentPanel.webview.html = this.getWebviewContent(this.currentPanel.webview, viewType); - - // Handle panel disposal - this.currentPanel.onDidDispose( - () => { - this.currentPanel = undefined; - this.currentViewType = undefined; - RPCLayer.dispose("wi-webview"); // Use a constant identifier for WI webview - }, - null, - ext.context.subscriptions, - ); - RPCLayer.create(this.currentPanel, "wi-webview"); - } - - /** - * Show welcome webview - */ - public showWelcome(): void { - this.show(ViewType.WELCOME); - } - - /** - * Get panel title based on view type - */ - private getPanelTitle(viewType: ViewType): string { - switch (viewType) { - case ViewType.CREATE_PROJECT: - return "WSO2 Integrator - Create Project"; - case ViewType.SAMPLES: - return "WSO2 Integrator - Explore Samples"; - case ViewType.IMPORT_EXTERNAL: - return "WSO2 Integrator - Import Project"; - case ViewType.WELCOME: - default: - return "WSO2 Integrator - Welcome"; - } - } - - /** - * Get webview HTML content - */ - private getWebviewContent(webview: vscode.Webview, type: ViewType): string { - const isDevMode = process.env.WEB_VIEW_DEV_MODE === "true"; - - const componentName = "main"; - const filePath = path.join(ext.context.extensionPath, 'resources', 'jslibs', componentName + '.js'); - const scriptUri = isDevMode - ? new URL('lib/' + componentName + '.js', process.env.WEB_VIEW_DEV_HOST).toString() - : webview.asWebviewUri(Uri.file(filePath)).toString(); - - // CSP: allow dev server in dev mode - const cspSource = isDevMode - ? `${webview.cspSource} http://localhost:* ws://localhost:*` - : webview.cspSource; - const styles = ` - .container { - background-color: var(--vscode-editor-background); - height: 100vh; - width: 100%; - margin: 0; - padding: 0; - overflow: hidden; - } - .loader-wrapper { - display: flex; - justify-content: center; - align-items: flex-start; - height: 100%; - width: 100%; - padding-top: 30vh; - } - .loader { - width: 32px; - aspect-ratio: 1; - border-radius: 50%; - border: 4px solid var(--vscode-button-background); - animation: - l20-1 0.8s infinite linear alternate, - l20-2 1.6s infinite linear; - } - @keyframes l20-1{ - 0% {clip-path: polygon(50% 50%,0 0, 50% 0%, 50% 0%, 50% 0%, 50% 0%, 50% 0% )} - 12.5% {clip-path: polygon(50% 50%,0 0, 50% 0%, 100% 0%, 100% 0%, 100% 0%, 100% 0% )} - 25% {clip-path: polygon(50% 50%,0 0, 50% 0%, 100% 0%, 100% 100%, 100% 100%, 100% 100% )} - 50% {clip-path: polygon(50% 50%,0 0, 50% 0%, 100% 0%, 100% 100%, 50% 100%, 0% 100% )} - 62.5% {clip-path: polygon(50% 50%,100% 0, 100% 0%, 100% 0%, 100% 100%, 50% 100%, 0% 100% )} - 75% {clip-path: polygon(50% 50%,100% 100%, 100% 100%, 100% 100%, 100% 100%, 50% 100%, 0% 100% )} - 100% {clip-path: polygon(50% 50%,50% 100%, 50% 100%, 50% 100%, 50% 100%, 50% 100%, 0% 100% )} - } - @keyframes l20-2{ - 0% {transform:scaleY(1) rotate(0deg)} - 49.99%{transform:scaleY(1) rotate(135deg)} - 50% {transform:scaleY(-1) rotate(0deg)} - 100% {transform:scaleY(-1) rotate(-135deg)} - } - .welcome-content { - text-align: center; - max-width: 500px; - padding: 2rem; - animation: fadeIn 1s ease-in-out; - font-family: var(--vscode-font-family); - } - .logo-container { - margin-bottom: 2rem; - display: flex; - justify-content: center; - } - .welcome-title { - color: var(--vscode-foreground); - margin: 0 0 0.5rem 0; - letter-spacing: -0.02em; - font-size: 1.5em; - font-weight: 400; - line-height: normal; - } - .welcome-subtitle { - color: var(--vscode-descriptionForeground); - font-size: 13px; - margin: 0 0 2rem 0; - opacity: 0.8; - } - .loading-text { - color: var(--vscode-foreground); - font-size: 13px; - font-weight: 500; - } - .loading-dots::after { - content: ''; - animation: dots 1.5s infinite; - } - @keyframes fadeIn { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } - } - @keyframes dots { - 0%, 20% { content: ''; } - 40% { content: '.'; } - 60% { content: '..'; } - 80%, 100% { content: '...'; } - } - `; - - return ` - - - - - - WSO2 Integrator - - - - -
-
-
-
-
-
-
-
-
- - - - `; - } - - /** - * Dispose webview - */ - public dispose(): void { - if (this.currentPanel) { - this.currentPanel.dispose(); - this.currentPanel = undefined; - } - } -} diff --git a/workspaces/wi/wi-extension/tsconfig.json b/workspaces/wi/wi-extension/tsconfig.json deleted file mode 100644 index 9f26e6d7361..00000000000 --- a/workspaces/wi/wi-extension/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "commonjs", - "lib": ["ES2020"], - "outDir": "./dist", - "rootDir": "./src", - "strict": true, - "strictNullChecks": false, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "sourceMap": true - }, - "include": ["src/**/*"], - "exclude": ["node_modules", "out", "dist"] -} diff --git a/workspaces/wi/wi-extension/webpack.config.js b/workspaces/wi/wi-extension/webpack.config.js deleted file mode 100644 index e94a103b2e7..00000000000 --- a/workspaces/wi/wi-extension/webpack.config.js +++ /dev/null @@ -1,53 +0,0 @@ -const path = require("path"); -const dotenv = require('dotenv'); -const webpack = require('webpack'); -const { createEnvDefinePlugin } = require("../../../common/scripts/env-webpack-helper"); - -const envPath = path.resolve(__dirname, '.env'); -const env = dotenv.config({ path: envPath }).parsed; -console.log("Fetching values for environment variables..."); -const { envKeys, missingVars } = createEnvDefinePlugin(env); -if (missingVars.length > 0) { - console.warn( - '\n⚠️ Environment Variable Configuration Warning:\n' + - `Missing required environment variables: ${missingVars.join(', ')}\n` + - `Please provide values in either .env file or runtime environment.\n` - ); -} - -/**@type {import('webpack').Configuration}*/ -const config = { - target: "node", - entry: "./src/extension.ts", - output: { - path: path.resolve(__dirname, "dist"), - filename: "extension.js", - libraryTarget: "commonjs2", - devtoolModuleFilenameTemplate: "../[resource-path]", - }, - devtool: "source-map", - externals: { - vscode: "commonjs vscode", - }, - resolve: { - extensions: [".ts", ".js"], - }, - module: { - rules: [ - { - test: /\.ts$/, - exclude: /node_modules/, - use: [ - { - loader: "ts-loader", - }, - ], - }, - ], - }, - plugins: [ - new webpack.DefinePlugin(envKeys), - ], -}; - -module.exports = config; diff --git a/workspaces/wi/wi-rpc-client/config/rush-project.json b/workspaces/wi/wi-rpc-client/config/rush-project.json deleted file mode 100644 index 3c3241c8f6a..00000000000 --- a/workspaces/wi/wi-rpc-client/config/rush-project.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../../rush-config.json" -} diff --git a/workspaces/wi/wi-rpc-client/eslint.config.cjs b/workspaces/wi/wi-rpc-client/eslint.config.cjs deleted file mode 100644 index 91c2f84c5b6..00000000000 --- a/workspaces/wi/wi-rpc-client/eslint.config.cjs +++ /dev/null @@ -1,31 +0,0 @@ -/* eslint-disable @typescript-eslint/no-require-imports, no-undef */ -const { - defineConfig, - globalIgnores, -} = require("eslint/config"); - -const tsParser = require("@typescript-eslint/parser"); -const typescriptEslint = require("@typescript-eslint/eslint-plugin"); -const js = require("@eslint/js"); - -const { - FlatCompat, -} = require("@eslint/eslintrc"); - -const compat = new FlatCompat({ - baseDirectory: __dirname, - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all -}); - -module.exports = defineConfig([{ - extends: compat.extends("eslint:recommended", "plugin:@typescript-eslint/recommended"), - - languageOptions: { - parser: tsParser, - }, - - plugins: { - "@typescript-eslint": typescriptEslint, - }, -}, globalIgnores(["**/lib", "**/.eslintrc.js", "**/*.d.ts"])]); diff --git a/workspaces/wi/wi-rpc-client/package.json b/workspaces/wi/wi-rpc-client/package.json deleted file mode 100644 index dd4ee884631..00000000000 --- a/workspaces/wi/wi-rpc-client/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "@wso2/wi-rpc-client", - "version": "1.0.0", - "description": "Contains RPC related client registrations", - "main": "lib/index.js", - "scripts": { - "lint": "eslint .", - "build": "pnpm run lint && tsc --pretty", - "watch": "tsc --pretty --watch", - "test": "echo \"Error: no test specified\" && exit 1", - "deploy": "npm publish" - }, - "author": "WSO2", - "devDependencies": { - "@types/react": "18.2.0", - "@types/react-dom": "18.2.0", - "typescript": "5.8.3", - "@typescript-eslint/parser": "^8.32.1", - "@typescript-eslint/eslint-plugin": "^8.32.1", - "eslint": "^9.27.0" - }, - "dependencies": { - "@types/vscode-webview": "^1.57.5", - "vscode-messenger-common": "^0.5.1", - "vscode-messenger-webview": "^0.5.1", - "@wso2/wi-core": "workspace:*", - "react": "19.1.0", - "react-dom": "19.1.0" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/wso2/ballerina-plugin-vscode.git" - }, - "publishConfig": { - "registry": "https://npm.pkg.github.com/" - } -} diff --git a/workspaces/wi/wi-rpc-client/src/RpcClient.ts b/workspaces/wi/wi-rpc-client/src/RpcClient.ts deleted file mode 100644 index 880f4ea08fa..00000000000 --- a/workspaces/wi/wi-rpc-client/src/RpcClient.ts +++ /dev/null @@ -1,57 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ - -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { Messenger } from "vscode-messenger-webview"; -import { vscode } from "./vscode"; -import { MainRpcClient } from "./rpc-clients/main/rpc-client"; -import { onDownloadProgress, onMigrationToolStateChanged, onMigrationToolLogs, DownloadProgress, MigrationToolStateData, MigrationToolLogData } from "@wso2/wi-core"; - -export class RpcClient { - - private messenger: Messenger; - private mainRpcClient: MainRpcClient; - - constructor() { - this.messenger = new Messenger(vscode); - this.messenger.start(); - this.mainRpcClient = new MainRpcClient(this.messenger); - } - - public getMainRpcClient(): MainRpcClient { - return this.mainRpcClient; - } - - public onDownloadProgress(callback: (progress: DownloadProgress) => void) { - this.messenger.onNotification(onDownloadProgress, callback); - } - - public onMigrationToolStateChanged(callback: (state: string) => void) { - this.messenger.onNotification(onMigrationToolStateChanged, (data: MigrationToolStateData) => { - callback(data.state); - }); - } - - public onMigrationToolLogs(callback: (log: string) => void) { - this.messenger.onNotification(onMigrationToolLogs, (data: MigrationToolLogData) => { - callback(data.log); - }); - } - -} diff --git a/workspaces/wi/wi-rpc-client/src/index.ts b/workspaces/wi/wi-rpc-client/src/index.ts deleted file mode 100644 index 472e59fa74f..00000000000 --- a/workspaces/wi/wi-rpc-client/src/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export { RpcClient } from './RpcClient'; diff --git a/workspaces/wi/wi-rpc-client/src/rpc-clients/main/rpc-client.ts b/workspaces/wi/wi-rpc-client/src/rpc-clients/main/rpc-client.ts deleted file mode 100644 index a2a3fb03463..00000000000 --- a/workspaces/wi/wi-rpc-client/src/rpc-clients/main/rpc-client.ts +++ /dev/null @@ -1,153 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - * THIS FILE INCLUDES AUTO GENERATED CODE - */ -import { - RunCommandRequest, - RunCommandResponse, - FileOrDirRequest, - FileOrDirResponse, - WorkspaceRootResponse, - WIVisualizerAPI, - openBiExtension, - openMiExtension, - runCommand, - selectFileOrDirPath, - selectFileOrFolderPath, - getWorkspaceRoot, - getConfiguration, - getSupportedMIVersionsHigherThan, - getSubFolderNames, - askProjectDirPath, - createMiProject, - fetchSamplesFromGithub, - downloadSelectedSampleFromGithub, - createBIProject, - getMigrationTools, - migrateProject, - pullMigrationTool, - importIntegration, - showErrorMessage, - GetConfigurationRequest, - GetConfigurationResponse, - GetSubFoldersRequest, - GetSubFoldersResponse, - ProjectDirResponse, - GetSupportedMIVersionsResponse, - CreateMiProjectRequest, - CreateMiProjectResponse, - GettingStartedData, - SampleDownloadRequest, - BIProjectRequest, - GetMigrationToolsResponse, - MigrateRequest, - PullMigrationToolRequest, - ImportIntegrationRPCRequest, - ImportIntegrationResponse, - ShowErrorMessageRequest -} from "@wso2/wi-core"; -import { HOST_EXTENSION } from "vscode-messenger-common"; -import { Messenger } from "vscode-messenger-webview"; - -export class MainRpcClient implements WIVisualizerAPI { - private _messenger: Messenger; - - constructor(messenger: Messenger) { - this._messenger = messenger; - } - - openBiExtension(): void { - return this._messenger.sendNotification(openBiExtension, HOST_EXTENSION); - } - - openMiExtension(): void { - return this._messenger.sendNotification(openMiExtension, HOST_EXTENSION); - } - - runCommand(params: RunCommandRequest): Promise { - return this._messenger.sendRequest(runCommand, HOST_EXTENSION, params); - } - - selectFileOrDirPath(params: FileOrDirRequest): Promise { - return this._messenger.sendRequest(selectFileOrDirPath, HOST_EXTENSION, params); - } - - selectFileOrFolderPath(): Promise { - return this._messenger.sendRequest(selectFileOrFolderPath, HOST_EXTENSION); - } - - getWorkspaceRoot(): Promise { - return this._messenger.sendRequest(getWorkspaceRoot, HOST_EXTENSION); - } - - getConfiguration(params: GetConfigurationRequest): Promise { - return this._messenger.sendRequest(getConfiguration, HOST_EXTENSION, params); - } - - getSupportedMIVersionsHigherThan(version: string): Promise { - return this._messenger.sendRequest(getSupportedMIVersionsHigherThan, HOST_EXTENSION, version); - } - - getSubFolderNames(params: GetSubFoldersRequest): Promise { - return this._messenger.sendRequest(getSubFolderNames, HOST_EXTENSION, params); - } - - askProjectDirPath(): Promise { - return this._messenger.sendRequest(askProjectDirPath, HOST_EXTENSION); - } - - createMiProject(params: CreateMiProjectRequest): Promise { - return this._messenger.sendRequest(createMiProject, HOST_EXTENSION, params); - } - - fetchSamplesFromGithub(): Promise { - return this._messenger.sendRequest(fetchSamplesFromGithub, HOST_EXTENSION); - } - - downloadSelectedSampleFromGithub(params: SampleDownloadRequest): void { - this._messenger.sendNotification(downloadSelectedSampleFromGithub, HOST_EXTENSION, params); - } - - createBIProject(params: BIProjectRequest): Promise { - return this._messenger.sendRequest(createBIProject, HOST_EXTENSION, params); - } - - getMigrationTools(): Promise { - return this._messenger.sendRequest(getMigrationTools, HOST_EXTENSION); - } - - migrateProject(params: MigrateRequest): Promise { - return this._messenger.sendRequest(migrateProject, HOST_EXTENSION, params); - } - - pullMigrationTool(params: PullMigrationToolRequest): Promise { - return this._messenger.sendRequest(pullMigrationTool, HOST_EXTENSION, params); - } - - importIntegration(params: ImportIntegrationRPCRequest): Promise { - return this._messenger.sendRequest(importIntegration, HOST_EXTENSION, params); - } - - showErrorMessage(params: ShowErrorMessageRequest): Promise { - return this._messenger.sendRequest(showErrorMessage, HOST_EXTENSION, params); - } - - getMessenger(): Messenger { - return this._messenger; - } -} diff --git a/workspaces/wi/wi-rpc-client/src/vscode.ts b/workspaces/wi/wi-rpc-client/src/vscode.ts deleted file mode 100644 index dd18b70ded1..00000000000 --- a/workspaces/wi/wi-rpc-client/src/vscode.ts +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import type { WebviewApi } from "vscode-webview"; - -/** - * A utility wrapper around the acquireVsCodeApi() function, which enables - * message passing and state management between the webview and extension - * contexts. - * - * This utility also enables webview code to be run in a web browser-based - * dev server by using native web browser features that mock the functionality - * enabled by acquireVsCodeApi. - */ -class VSCodeAPIWrapper { - private readonly vsCodeApi: WebviewApi | undefined; - - constructor() { - // Check if the acquireVsCodeApi function exists in the current development - // context (i.e. VS Code development window or web browser) - if (typeof acquireVsCodeApi === "function") { - this.vsCodeApi = acquireVsCodeApi(); - } - } - - /** - * Post a message (i.e. send arbitrary data) to the owner of the webview. - * - * @remarks When running webview code inside a web browser, postMessage will instead - * log the given message to the console. - * - * @param message Abitrary data (must be JSON serializable) to send to the extension context. - */ - public postMessage(message: unknown) { - if (this.vsCodeApi) { - this.vsCodeApi.postMessage(message); - } else { - console.log(message); - } - } - - /** - * Get the persistent state stored for this webview. - * - * @remarks When running webview source code inside a web browser, getState will retrieve state - * from local storage (https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage). - * - * @return The current state or `undefined` if no state has been set. - */ - public getState(): unknown | undefined { - if (this.vsCodeApi) { - return this.vsCodeApi.getState(); - } else { - const state = localStorage.getItem("vscodeState"); - return state ? JSON.parse(state) : undefined; - } - } - - /** - * Set the persistent state stored for this webview. - * - * @remarks When running webview source code inside a web browser, setState will set the given - * state using local storage (https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage). - * - * @param newState New persisted state. This must be a JSON serializable object. Can be retrieved - * using {@link getState}. - * - * @return The new state. - */ - public setState(newState: T): T { - if (this.vsCodeApi) { - return this.vsCodeApi.setState(newState); - } else { - localStorage.setItem("vscodeState", JSON.stringify(newState)); - return newState; - } - } -} - -// Exports class singleton to prevent multiple invocations of acquireVsCodeApi. -export const vscode = new VSCodeAPIWrapper(); \ No newline at end of file diff --git a/workspaces/wi/wi-rpc-client/tsconfig.json b/workspaces/wi/wi-rpc-client/tsconfig.json deleted file mode 100644 index 58613a52935..00000000000 --- a/workspaces/wi/wi-rpc-client/tsconfig.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "compilerOptions": { - "module": "CommonJS", - "target": "ES6", - "useDefineForClassFields": true, - "lib": ["ES6", "DOM", "DOM.Iterable"], - "skipLibCheck": true, - "outDir": "./lib", - "rootDir": "./src", - - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "react", - "sourceMap": true, - "declaration": true, - "declarationDir": "./lib", - "esModuleInterop": true, - - "strict": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noFallthroughCasesInSwitch": true, - "allowSyntheticDefaultImports": true, - "forceConsistentCasingInFileNames": true, - "strictNullChecks": false, - "preserveSymlinks": true, - "noImplicitReturns": false, - "noImplicitAny": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "noImplicitThis": true, - "typeRoots": [ - "node_modules/@types" - ], - }, - "include": [ - "src" - ], - "exclude": [ - "node_modules", - "lib" - ] -} diff --git a/workspaces/wi/wi-webviews/biome.json b/workspaces/wi/wi-webviews/biome.json deleted file mode 100644 index bcec3347ac9..00000000000 --- a/workspaces/wi/wi-webviews/biome.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", - "vcs": { - "enabled": false, - "clientKind": "git", - "useIgnoreFile": false - }, - "files": { - "ignoreUnknown": false, - "ignore": [] - }, - "formatter": { - "enabled": true, - "indentStyle": "tab" - }, - "organizeImports": { - "enabled": true - }, - "linter": { - "enabled": true, - "rules": { - "recommended": false - } - }, - "javascript": { - "formatter": { - "quoteStyle": "double" - } - } -} diff --git a/workspaces/wi/wi-webviews/config/rush-project.json b/workspaces/wi/wi-webviews/config/rush-project.json deleted file mode 100644 index 3c3241c8f6a..00000000000 --- a/workspaces/wi/wi-webviews/config/rush-project.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../../rush-config.json" -} diff --git a/workspaces/wi/wi-webviews/package.json b/workspaces/wi/wi-webviews/package.json deleted file mode 100644 index bdeda2df0f9..00000000000 --- a/workspaces/wi/wi-webviews/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "@wso2/wi-webviews", - "version": "1.0.0", - "description": "Webview components for WSO2 Integrator Extension", - "main": "lib/index.js", - "types": "lib/index.d.ts", - "scripts": { - "lint": "biome check .", - "lint:fix": "biome check --write --unsafe .", - "start": "webpack-dev-server --mode=development --progress", - "build": "tsc --pretty && webpack --mode production && npm run copy:assets", - "copy:assets": "copyfiles -u 1 \"src/**/*.css\" \"src/**/*.svg\" \"src/**/*.png\" lib/" - }, - "keywords": [], - "author": "WSO2", - "license": "Apache-2.0", - "dependencies": { - "@vscode/webview-ui-toolkit": "^1.4.0", - "@wso2/wi-core": "workspace:*", - "react": "18.2.0", - "react-dom": "18.2.0", - "vscode-messenger-common": "^0.5.1", - "vscode-messenger-webview": "^0.5.1", - "classnames": "~2.5.1", - "@pmmmwh/react-refresh-webpack-plugin": "~0.6.1", - "@wso2/wi-rpc-client": "workspace:*", - "@emotion/styled": "~11.14.1", - "@wso2/ui-toolkit": "workspace:*", - "yup": "~1.7.1", - "react-hook-form": "~7.66.0", - "@hookform/resolvers": "^5.2.2" - }, - "devDependencies": { - "@biomejs/biome": "^1.9.4", - "@types/node": "^22.15.21", - "@types/react": "18.2.0", - "@types/react-dom": "18.2.0", - "copyfiles": "~2.4.1", - "css-loader": "^7.1.2", - "style-loader": "^4.0.0", - "typescript": "5.8.3", - "webpack": "^5.102.1", - "webpack-cli": "^6.0.1", - "webpack-dev-server": "^5.2.2", - "ts-loader": "^9.5.1", - "react-hot-loader": "~4.13.1", - "source-map-loader": "~5.0.0" - } -} diff --git a/workspaces/wi/wi-webviews/src/IntegratorWebview.tsx b/workspaces/wi/wi-webviews/src/IntegratorWebview.tsx deleted file mode 100644 index 2be463d6969..00000000000 --- a/workspaces/wi/wi-webviews/src/IntegratorWebview.tsx +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ViewType } from "@wso2/wi-core"; -import { WelcomeView } from "./views/WelcomeView"; -import { CreationView } from "./views/creationView"; -import { ImportIntegration } from "./views/ImportIntegration"; -import { SamplesView } from "./views/samplesView"; - -export interface WebviewProps { - type: ViewType; -} -function IntegratorWebview(props: WebviewProps) { - const goBackToWelcome = () => {}; - - switch (props.type) { - case ViewType.WELCOME: - return ; - case ViewType.CREATE_PROJECT: - return ; - case ViewType.SAMPLES: - return ( - - ); - case ViewType.IMPORT_EXTERNAL: - return ( - - ); - default: - return ( -
-

Unknown View Type

-

The requested view is not available.

-
- ); - } -} - -export default IntegratorWebview; diff --git a/workspaces/wi/wi-webviews/src/components/ButtonCard/index.tsx b/workspaces/wi/wi-webviews/src/components/ButtonCard/index.tsx deleted file mode 100644 index 154cf656b1a..00000000000 --- a/workspaces/wi/wi-webviews/src/components/ButtonCard/index.tsx +++ /dev/null @@ -1,167 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import React from "react"; -import { ThemeColors, Tooltip } from "@wso2/ui-toolkit"; -import styled from "@emotion/styled"; -import { BetaSVG } from "../../views/ImportIntegration/BetaSVG"; - -const Card = styled.div<{ active?: boolean; appearance?: ButtonCardAppearance, disabled?: boolean, sx?: any }>` - gap: 16px; - max-width: 42rem; - padding: 12px; - border-radius: 4px; - border: 1px solid - ${(props: { active: boolean }) => (props.active ? ThemeColors.PRIMARY : ThemeColors.OUTLINE_VARIANT)}; - background-color: ${(props: { active: boolean }) => - props.active ? ThemeColors.PRIMARY_CONTAINER : ThemeColors.SURFACE_DIM}; - cursor: ${(props: { disabled: boolean }) => (props.disabled ? 'not-allowed' : 'pointer')};; - &:hover { - background-color: ${ThemeColors.PRIMARY_CONTAINER}; - border: 1px solid ${ThemeColors.HIGHLIGHT}; - }; -`; - -const CardContainer = styled.div<{ active?: boolean }>` - display: flex; - gap: 12px; - align-items: center; -`; - -const Text = styled.p` - font-size: 13px; - color: ${ThemeColors.ON_SURFACE}; - margin: 0; -`; - -interface TextProps { - truncate?: boolean; -} - -const Title = styled(Text)` - font-weight: bold; - white-space: ${(props: TextProps) => (props.truncate ? "nowrap" : "normal")}; - overflow: ${(props: TextProps) => (props.truncate ? "hidden" : "visible")}; - text-overflow: ${(props: TextProps) => (props.truncate ? "ellipsis" : "clip")}; - display: flex; - align-items: center; - gap: 8px; -`; - -const Caption = styled(Text)` - font-size: 11px; - font-weight: bold; - opacity: 0.6; -`; - -const Description = styled(Text)` - opacity: 0.8; - margin-top: 4px; - overflow: hidden; - display: ${(props: TextProps) => (props.truncate ? "block" : "-webkit-box")}; - white-space: ${(props: TextProps) => (props.truncate ? "nowrap" : "normal")}; - text-overflow: ${(props: TextProps) => (props.truncate ? "ellipsis" : "clip")}; - ${(props: TextProps) => - !props.truncate && - ` - -webkit-line-clamp: 1; - -webkit-box-orient: vertical; - `} -`; - -const ContentContainer = styled.div` - flex: 1; - overflow: hidden; -`; - -const IconContainer = styled.div` - flex-shrink: 0; - display: flex; - align-items: center; - justify-content: center; - max-width: 24px; - > div:first-child { - width: 24px; - height: 24px; - font-size: 24px; - } -`; - -export type ButtonCardAppearance = "large" | "small"; - -export interface ButtonCardProps { - id?: string; - title: string; - caption?: string; - description?: string; - icon?: React.ReactNode; - active?: boolean; - appearance?: ButtonCardAppearance; - truncate?: boolean; - onClick: () => void; - disabled?: boolean; - tooltip?: string; - isBeta?: boolean; -} - -export function ButtonCard(props: ButtonCardProps) { - const { - title, - caption, - description, - icon, - active, - appearance = "large", - truncate: explicitTruncate, - onClick, - disabled, - tooltip, - isBeta - } = props; - - // Apply truncation by default for small appearance if not explicitly set - const truncate = explicitTruncate !== undefined ? explicitTruncate : appearance === "small"; - - return ( - - - - {icon && {icon}} - - {caption && {caption}} - - {title} - {isBeta && <BetaSVG />} - - {description && {description}} - - - - - ); -} - -export default ButtonCard; diff --git a/workspaces/wi/wi-webviews/src/components/IntegrationTypeSelector/index.tsx b/workspaces/wi/wi-webviews/src/components/IntegrationTypeSelector/index.tsx deleted file mode 100644 index 8b1cc8e4764..00000000000 --- a/workspaces/wi/wi-webviews/src/components/IntegrationTypeSelector/index.tsx +++ /dev/null @@ -1,156 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { useState, useEffect, useRef } from "react"; -import styled from "@emotion/styled"; -import { Codicon } from "@wso2/ui-toolkit"; - -const SelectorContainer = styled.div` - position: relative; - top: -35px; - cursor: pointer; - width: fit-content; -`; - -const PropertyKey = styled.span` - color: var(--vscode-descriptionForeground); - font-weight: 500; -`; - -const PropertyValue = styled.span` - display: flex; - color: var(--vscode-editor-foreground); - font-family: var(--vscode-editor-font-family); -`; - -const PropertyInline = styled.div` - display: inline-flex; - align-items: center; - gap: 6px; - padding: 3px 8px; - background: var(--vscode-input-background); - border: 1px solid var(--vscode-editorWidget-border); - border-radius: 4px; - font-size: 11px; - height: 24px; - pointer-events: none; - width: fit-content; -`; - -const DropdownMenu = styled.div` - position: absolute; - top: 100%; - left: 36px; - margin-top: 0; - background: var(--vscode-dropdown-background); - border: 1px solid var(--vscode-dropdown-border); - border-radius: 4px; - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); - min-width: 90px; - z-index: 1000; -`; - -const DropdownItem = styled.div` - padding: 4px 8px; - cursor: pointer; - font-size: 11px; - color: var(--vscode-dropdown-foreground); - font-family: var(--vscode-editor-font-family); - - &:hover { - background: var(--vscode-list-hoverBackground); - } - - &:first-of-type { - border-radius: 4px 4px 0 0; - } - - &:last-of-type { - border-radius: 0 0 4px 4px; - } -`; - -export interface TypeOption { - label: string; - value: string; -} - -export interface IntegrationTypeSelectorProps { - label?: string; - value: string; - options: TypeOption[]; - onChange: (value: string) => void; -} - -export function IntegrationTypeSelector({ - label = "Type:", - value, - options, - onChange -}: IntegrationTypeSelectorProps) { - const [showDropdown, setShowDropdown] = useState(false); - const dropdownRef = useRef(null); - - // Close dropdown when clicking outside - useEffect(() => { - const handleClickOutside = (event: MouseEvent) => { - if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { - setShowDropdown(false); - } - }; - - if (showDropdown) { - document.addEventListener('mousedown', handleClickOutside); - } - - return () => { - document.removeEventListener('mousedown', handleClickOutside); - }; - }, [showDropdown]); - - return ( - setShowDropdown(!showDropdown)}> - - {label} - {value} - - - {showDropdown && ( - - {options.map((option) => ( - { - e.stopPropagation(); - onChange(option.value); - setShowDropdown(false); - }} - > - {option.label} - - ))} - - )} - - ); -} - - diff --git a/workspaces/wi/wi-webviews/src/components/Loader/index.tsx b/workspaces/wi/wi-webviews/src/components/Loader/index.tsx deleted file mode 100644 index 59ab9c04de9..00000000000 --- a/workspaces/wi/wi-webviews/src/components/Loader/index.tsx +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import React from "react"; -import styled from "@emotion/styled"; -import { ProgressRing, ThemeColors } from "@wso2/ui-toolkit"; -import { Typography } from "@wso2/ui-toolkit"; -interface LoadingRingProps { - message?: string; -} - -export const LoadingRing = ({ message }: LoadingRingProps) => { - const ProgressContainer = styled.div` - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - gap: 16px; - `; - - const LoadingText = styled(Typography)` - margin-top: 16px; - color: var(--vscode-descriptionForeground); - font-size: 14px; - `; - - return ( - - - {message && ( - - {message} - - )} - - ); -}; diff --git a/workspaces/wi/wi-webviews/src/components/View/View.tsx b/workspaces/wi/wi-webviews/src/components/View/View.tsx deleted file mode 100644 index 6ff36339e1f..00000000000 --- a/workspaces/wi/wi-webviews/src/components/View/View.tsx +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import React, { ReactNode } from 'react'; -import styled from "@emotion/styled"; - - -const ViewWrapper = styled.div({ - display: 'flex', - flexDirection: 'column', - height: '100vh', -}); - -const View: React.FC<{ children: ReactNode }> = ({ children }) => { - return ( - - {children} - - ); -}; - -export default View; \ No newline at end of file diff --git a/workspaces/wi/wi-webviews/src/components/View/ViewContent.tsx b/workspaces/wi/wi-webviews/src/components/View/ViewContent.tsx deleted file mode 100644 index bcee77d4211..00000000000 --- a/workspaces/wi/wi-webviews/src/components/View/ViewContent.tsx +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import React, { ReactNode } from 'react'; -import styled from "@emotion/styled"; - -const ViewContentWrapper = styled.div({ - display: 'flex', - flexDirection: 'column', - flexGrow: 1, - overflowY: 'auto', - background: 'var(--vscode-editor-background)' -}); - -type ViewContentProps = { - children: ReactNode; - padding?: boolean; -}; - -const ViewContent: React.FC = ({ children, padding = false }) => { - return ( - - {children} - - ); -}; - -export default ViewContent; diff --git a/workspaces/wi/wi-webviews/src/components/View/ViewHeader.tsx b/workspaces/wi/wi-webviews/src/components/View/ViewHeader.tsx deleted file mode 100644 index 353fcd5e70e..00000000000 --- a/workspaces/wi/wi-webviews/src/components/View/ViewHeader.tsx +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import React from 'react'; -import styled from '@emotion/styled'; -import { Button, Icon, Codicon } from "@wso2/ui-toolkit"; - - -type ViewHeaderProps = { - title: string | React.ReactNode; - children?: React.ReactNode; - codicon?: string; - icon?: string; - iconSx?: any; - onEdit?: () => void; -}; - -// Emotion styled components -const Header = styled.div({ - backgroundColor: 'var(--vscode-editor-background)', -}); - -const HeaderContentWrapper = styled.div({ - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center', -}); - -const TitleContainer = styled.div({ - display: 'flex', - alignItems: 'center', - '& > *:not(:last-child)': { // Apply margin right to all children except the last one - marginRight: '5px', - }, -}); - -const Title = styled.h3({ - /* Style for title */ - display: 'flex', - alignItems: 'center', - gap: '5px' -}); - -const Actions = styled.div({ - /* Style for actions */ - display: 'flex', - alignItems: 'center', - gap: '5px' -}); - -const ViewHeader: React.FC = ({ title, children, codicon, icon, iconSx, onEdit }) => { - return ( -
- - - {codicon && } - {icon &&
} - {typeof title === 'string' ? {title} : title} - {onEdit && ( - - )} -
- {children} -
-
- ); -}; - -export default ViewHeader; diff --git a/workspaces/wi/wi-webviews/src/components/View/index.tsx b/workspaces/wi/wi-webviews/src/components/View/index.tsx deleted file mode 100644 index 4fc47e027f2..00000000000 --- a/workspaces/wi/wi-webviews/src/components/View/index.tsx +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import View from './View'; -import ViewHeader from './ViewHeader'; -import ViewContent from './ViewContent'; -export { View, ViewHeader, ViewContent }; diff --git a/workspaces/wi/wi-webviews/src/contexts/RpcContext.tsx b/workspaces/wi/wi-webviews/src/contexts/RpcContext.tsx deleted file mode 100644 index c0fdf1f80fb..00000000000 --- a/workspaces/wi/wi-webviews/src/contexts/RpcContext.tsx +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import React, { ReactNode, useState } from 'react'; -import { RpcClient } from '@wso2/wi-rpc-client'; - -export interface VisualizerContext { - rpcClient: RpcClient; -} - -export const Context = React.createContext(undefined); - -export function VisualizerContextProvider({ children }: { children: ReactNode }) { - const [visualizerState] = useState({ - rpcClient: new RpcClient(), // Create the root RPC layer client object - }); - - return ( - - {children} - - ); -} - -export function useVisualizerContext(): VisualizerContext { - const context = React.useContext(Context); - if (!context) { - throw new Error('useVisualizerContext must be used within VisualizerContextProvider'); - } - return context; -} diff --git a/workspaces/wi/wi-webviews/src/contexts/index.ts b/workspaces/wi/wi-webviews/src/contexts/index.ts deleted file mode 100644 index a758fad40ce..00000000000 --- a/workspaces/wi/wi-webviews/src/contexts/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -export { Context, VisualizerContextProvider, useVisualizerContext } from './RpcContext'; -export type { VisualizerContext } from './RpcContext'; diff --git a/workspaces/wi/wi-webviews/src/index.tsx b/workspaces/wi/wi-webviews/src/index.tsx deleted file mode 100644 index 2f50d186658..00000000000 --- a/workspaces/wi/wi-webviews/src/index.tsx +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import React from "react"; -import ReactDOM from "react-dom/client"; -import { ViewType } from "@wso2/wi-core"; -import IntegratorWebview from "./IntegratorWebview"; -import { VisualizerContextProvider } from "./contexts/RpcContext"; -import "./style.css"; - -export function renderWebview(target: HTMLElement, type: ViewType) { - const reactRoot = ReactDOM.createRoot(target); - reactRoot.render( - - - - - , - ); -} diff --git a/workspaces/wi/wi-webviews/src/style.css b/workspaces/wi/wi-webviews/src/style.css deleted file mode 100644 index d238fb4c09f..00000000000 --- a/workspaces/wi/wi-webviews/src/style.css +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -body { - margin: 0; - padding: 0; - font-family: var(--vscode-font-family); - font-size: var(--vscode-font-size); - color: var(--vscode-foreground); - background-color: var(--vscode-editor-background); -} - -* { - box-sizing: border-box; -} - -#root { - width: 100%; - height: 100vh; - overflow-y: auto; -} diff --git a/workspaces/wi/wi-webviews/src/views/ImportIntegration/BetaSVG.tsx b/workspaces/wi/wi-webviews/src/views/ImportIntegration/BetaSVG.tsx deleted file mode 100644 index 4e9ddbe0da5..00000000000 --- a/workspaces/wi/wi-webviews/src/views/ImportIntegration/BetaSVG.tsx +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import * as React from "react"; - -export const BETA_SVG_WIDTH = 26; -export const BETA_SVG_HEIGHT = 12; - -export function BetaSVG({ width = 40, height = 16 }) { - return ( - - - - Beta - - - ); -} diff --git a/workspaces/wi/wi-webviews/src/views/ImportIntegration/ConfigureProjectForm.tsx b/workspaces/wi/wi-webviews/src/views/ImportIntegration/ConfigureProjectForm.tsx deleted file mode 100644 index 76903ec6a42..00000000000 --- a/workspaces/wi/wi-webviews/src/views/ImportIntegration/ConfigureProjectForm.tsx +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ActionButtons, Typography } from "@wso2/ui-toolkit"; -import { useState } from "react"; -import { BodyText, ButtonWrapper } from "./styles"; -import { ConfigureProjectFormProps } from "./types"; -import { ProjectFormData, ProjectFormFields } from "../creationView/biForm/ProjectFormFields"; -import { isFormValid } from "../creationView/biForm/utils"; - -export function ConfigureProjectForm({ onNext, onBack }: ConfigureProjectFormProps) { - const [formData, setFormData] = useState({ - integrationName: "", - packageName: "", - path: "", - createDirectory: true, - orgName: "", - version: "", - }); - - const handleFormDataChange = (data: Partial) => { - setFormData(prev => ({ ...prev, ...data })); - }; - - const handleCreateProject = () => { - onNext({ - projectName: formData.integrationName, - packageName: formData.packageName, - projectPath: formData.path, - createDirectory: formData.createDirectory, - orgName: formData.orgName || undefined, - version: formData.version || undefined, - }); - }; - - return ( - <> - Configure Your Integration Project - Please provide the necessary details to create your integration project. - - - - - - - - ); -} diff --git a/workspaces/wi/wi-webviews/src/views/ImportIntegration/ImportIntegrationForm.tsx b/workspaces/wi/wi-webviews/src/views/ImportIntegration/ImportIntegrationForm.tsx deleted file mode 100644 index 20fcd55ca87..00000000000 --- a/workspaces/wi/wi-webviews/src/views/ImportIntegration/ImportIntegrationForm.tsx +++ /dev/null @@ -1,174 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -// import { MigrationTool } from "@wso2/ballerina-core"; -import { ActionButtons, Icon, LocationSelector, Typography } from "@wso2/ui-toolkit"; -import { useState } from "react"; -import { useVisualizerContext } from "../../contexts/RpcContext"; -import { IntegrationParameters } from "./components/IntegrationParameters"; -import { - BodyText, - ButtonWrapper, - IntegrationCardGrid, - LoadingOverlayContainer, - PathText, - StepContainer, -} from "./styles"; -import { FinalIntegrationParams, ImportIntegrationFormProps } from "./types"; -import { getImportTooltip, SELECTION_TEXT } from "./utils"; -import ButtonCard from "../../components/ButtonCard"; -import { LoadingRing } from "../../components/Loader"; -import { MigrationTool } from "@wso2/wi-core"; - -export function ImportIntegrationForm({ - selectedIntegration, - migrationTools, - onSelectIntegration, - pullIntegrationTool, - setImportParams, - pullingTool, - toolPullProgress, - handleStartImport, - onBack, -}: ImportIntegrationFormProps) { - const { rpcClient } = useVisualizerContext(); - - const [importSourcePath, setImportSourcePath] = useState(""); - const [integrationParams, setIntegrationParams] = useState>({}); - - const isImportDisabled = importSourcePath.length < 2 || !selectedIntegration; - - const handleIntegrationSelection = (integration: MigrationTool) => { - // Reset state when a new integration is selected - setImportSourcePath(""); - onSelectIntegration(integration); - const defaultParams = integration.parameters.reduce((acc, param) => { - acc[param.key] = param.defaultValue; - return acc; - }, {} as Record); - setIntegrationParams(defaultParams); - }; - - const handleFolderSelection = async () => { - const result = await rpcClient.getMainRpcClient().selectFileOrFolderPath(); - if (result?.path) { - setImportSourcePath(result.path); - } - }; - - const handleImportIntegration = () => { - if (!selectedIntegration || !importSourcePath) return; - - const finalParams: FinalIntegrationParams = { - importSourcePath, - type: selectedIntegration.title, - parameters: integrationParams, - }; - - setImportParams(finalParams); - if (selectedIntegration.needToPull) { - pullIntegrationTool(selectedIntegration.commandName, selectedIntegration.requiredVersion); - } else { - handleStartImport(finalParams, selectedIntegration, toolPullProgress); - } - }; - - const handleParameterChange = (paramKey: string, value: any) => { - setIntegrationParams((prev) => ({ - ...prev, - [paramKey]: value, - })); - }; - - return ( - <> - - This wizard converts an external integration project from MuleSoft or TIBCO into a ready-to-use BI - project. - - - Choose the source platform - - Select the integration platform that your current project uses: - - {migrationTools.map((tool) => { - return ( - } - title={tool.title} - description="" - onClick={() => handleIntegrationSelection(tool)} - active={selectedIntegration?.id === tool.id} - /> - ); - })} - - - {selectedIntegration && ( - - Select Your Project Folder - {selectedIntegration.description} - - - )} - - {!selectedIntegration && ( - -
{SELECTION_TEXT}
-
- )} - - {selectedIntegration && ( - - )} - - - - - - {pullingTool && ( - - - - )} - - ); -} diff --git a/workspaces/wi/wi-webviews/src/views/ImportIntegration/MigrationProgressView.tsx b/workspaces/wi/wi-webviews/src/views/ImportIntegration/MigrationProgressView.tsx deleted file mode 100644 index 46fffc411d6..00000000000 --- a/workspaces/wi/wi-webviews/src/views/ImportIntegration/MigrationProgressView.tsx +++ /dev/null @@ -1,156 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ActionButtons, Typography } from "@wso2/ui-toolkit"; -import { useEffect, useMemo, useState } from "react"; -import { MigrationLogs } from "./components/MigrationLogs"; -import { MigrationStatusContent } from "./components/MigrationStatusContent"; -import { BodyText, ButtonWrapper, NextButtonWrapper, StepWrapper } from "./styles"; -import { MigrationProgressProps, MigrationReportJSON } from "./types"; -import { getMigrationDisplayState, getMigrationProgressHeaderData } from "./utils"; - -export function MigrationProgressView({ - migrationState, - migrationLogs, - migrationCompleted, - migrationSuccessful, - migrationResponse, - onNext, - onBack, -}: MigrationProgressProps) { - const [isLogsOpen, setIsLogsOpen] = useState(false); - - // Parse migration report JSON when available - const parsedReportData = useMemo(() => { - if (!migrationResponse?.jsonReport) return null; - try { - return JSON.parse(migrationResponse.jsonReport) as MigrationReportJSON; - } catch (error) { - console.error("Failed to parse migration report JSON:", error); - } - }, [migrationResponse?.jsonReport]); - - // Auto-open logs during migration and auto-collapse when completed - useEffect(() => { - if (!migrationCompleted && migrationLogs.length > 0) { - // Migration is in progress and we have logs - open the dropdown - setIsLogsOpen(true); - } else if (migrationCompleted) { - // Migration is completed - collapse the dropdown - setIsLogsOpen(false); - } - }, [migrationCompleted, migrationLogs.length]); - - const handleViewReport = async () => { - console.log("View report clicked", { migrationResponse }); - try { - if (migrationResponse?.report) { - console.log("Report found, opening via RPC..."); - // rpcClient.getMigrateIntegrationRpcClient().openMigrationReport({ - // reportContent: migrationResponse.report, - // fileName: "migration-report.html", - // }); - } - } catch (error) { - console.error("Failed to open migration report:", error); - } - }; - - const handleSaveReport = async () => { - console.log("Save report clicked", { migrationResponse }); - try { - if (!migrationResponse?.report) { - console.error("No report content available to save"); - return; - } - - // VSCode extension environment - use RPC to show save dialog - console.log("Saving report via VSCode save dialog..."); - // rpcClient.getMigrateIntegrationRpcClient().saveMigrationReport({ - // reportContent: migrationResponse.report, - // defaultFileName: "migration-report.html", - // }); - } catch (error) { - console.error("Failed to save migration report:", error); - } - }; - - const displayState = getMigrationDisplayState(migrationCompleted, migrationSuccessful, !!parsedReportData); - const { headerText, headerDesc } = getMigrationProgressHeaderData(displayState); - - return ( - <> -
- {headerText} - {headerDesc} -
- - - {displayState.showButtonsInStep && ( - - - - )} - - - setIsLogsOpen(!isLogsOpen)} - showHeader={!(migrationCompleted && !migrationSuccessful)} - /> - - {/* Show button after logs when migration is in progress or failed */} - {displayState.showButtonsAfterLogs && ( - - - - )} - - ); -} diff --git a/workspaces/wi/wi-webviews/src/views/ImportIntegration/components/CoverageSummary.tsx b/workspaces/wi/wi-webviews/src/views/ImportIntegration/components/CoverageSummary.tsx deleted file mode 100644 index 01ae4353404..00000000000 --- a/workspaces/wi/wi-webviews/src/views/ImportIntegration/components/CoverageSummary.tsx +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { Codicon } from "@wso2/ui-toolkit"; -import React from "react"; -import { - CoverageBadge, - CoverageContainer, - CoverageHeader, - CoverageLabel, - CoveragePercentage, - CoverageProgressBar, - CoverageProgressFill, - CoverageStat, - CoverageStats, - ReportButtonsContainer, - SaveReportButton, - ViewReportButton, -} from "../styles"; -import { MigrationReportJSON } from "../types"; -import { getCoverageColor, getCoverageLevel } from "../utils"; - - -interface CoverageSummaryProps { - reportData: MigrationReportJSON; - onViewReport: () => void; - onSaveReport: () => void; -} - -export const CoverageSummary: React.FC = ({ reportData, onViewReport, onSaveReport }) => { - const { coverageOverview } = reportData; - const coverageLevel = getCoverageLevel(coverageOverview.coverageLevel); - const coverageColor = getCoverageColor(coverageOverview.coverageLevel); - - return ( - - -
- - {coverageOverview.coveragePercentage}% - - Migration Coverage -
- - - Total {coverageOverview.unitName}(s): - {coverageOverview.totalElements} - - - Migratable {coverageOverview.unitName}(s): - {coverageOverview.migratableElements} - - - Non-migratable {coverageOverview.unitName}(s): - {coverageOverview.nonMigratableElements} - - -
- - - - {coverageLevel} - - - -  View Full Report - - - -  Save Report - - -
- ); -}; diff --git a/workspaces/wi/wi-webviews/src/views/ImportIntegration/components/IntegrationParameters.tsx b/workspaces/wi/wi-webviews/src/views/ImportIntegration/components/IntegrationParameters.tsx deleted file mode 100644 index b1a29ebd557..00000000000 --- a/workspaces/wi/wi-webviews/src/views/ImportIntegration/components/IntegrationParameters.tsx +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { CheckBox, Dropdown, OptionProps, TextField, Typography } from "@wso2/ui-toolkit"; -import React from "react"; -import { BodyText, ParameterItem, ParametersSection } from "../styles"; -import { MigrationTool } from "@wso2/wi-core"; - -interface IntegrationParametersProps { - selectedIntegration: MigrationTool; - integrationParams: Record; - onParameterChange: (paramKey: string, value: any) => void; -} - -export const IntegrationParameters: React.FC = ({ - selectedIntegration, - integrationParams, - onParameterChange, -}) => { - if (!selectedIntegration || !selectedIntegration.parameters.length) return null; - - return ( - - - Configure {selectedIntegration.title} Settings - - {`Configure additional settings for ${selectedIntegration.title} migration.`} - {selectedIntegration.parameters.map((param) => ( - - {param.valueType === "boolean" ? ( - onParameterChange(param.key, checked)} - label={param.label} - /> - ) : param.valueType === "enum" && param.options ? ( - ({ - id: option, - content: option - } as OptionProps))} - onChange={(e) => onParameterChange(param.key, e.target.value)} - containerSx={{ - position: 'relative', - marginBottom: '60px', - '& vscode-dropdown::part(listbox)': { - position: 'absolute !important', - top: '100% !important', - bottom: 'auto !important', - transform: 'none !important', - marginTop: '2px !important' - } - }} - /> - ) : ( - onParameterChange(param.key, value)} - label={param.label} - placeholder={`Enter ${param.label.toLowerCase()}`} - /> - )} - - ))} - - ); -}; diff --git a/workspaces/wi/wi-webviews/src/views/ImportIntegration/components/MigrationLogs.tsx b/workspaces/wi/wi-webviews/src/views/ImportIntegration/components/MigrationLogs.tsx deleted file mode 100644 index a0663bd03e7..00000000000 --- a/workspaces/wi/wi-webviews/src/views/ImportIntegration/components/MigrationLogs.tsx +++ /dev/null @@ -1,94 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { Codicon, Typography } from "@wso2/ui-toolkit"; -import React, { useEffect, useRef } from "react"; -import { - CardAction, - CollapsibleHeader, - LogEntry, - LogsContainer, - StepWrapper, -} from "../styles"; - - -interface MigrationLogsProps { - migrationLogs: string[]; - migrationCompleted: boolean; - isLogsOpen: boolean; - onToggleLogs: () => void; - showHeader?: boolean; -} - -const getColourizedLog = (log: string, index: number) => { - if (log.startsWith("[SEVERE]")) { - return ( - - {log} - - ); - } else if (log.startsWith("[WARN]")) { - return ( - - {log} - - ); - } - return {log}; -}; - -export const MigrationLogs: React.FC = ({ - migrationLogs, - migrationCompleted, - isLogsOpen, - onToggleLogs, - showHeader = true, -}) => { - const logsContainerRef = useRef(null); - - // Auto-scroll to bottom when new logs are added - useEffect(() => { - if (logsContainerRef.current && isLogsOpen && !migrationCompleted) { - logsContainerRef.current.scrollTop = logsContainerRef.current.scrollHeight; - } - }, [migrationLogs, isLogsOpen, migrationCompleted]); - - if (migrationLogs.length === 0) { - return null; - } - - return ( - - {/* Only show header when migration is completed and showHeader is true */} - {migrationCompleted && showHeader && ( - - View Detailed Logs - - {isLogsOpen ? : } - - - )} - {/* Show logs container when open OR when migration is in progress OR when showHeader is false */} - {(isLogsOpen || !migrationCompleted || !showHeader) && ( - - {migrationLogs.map(getColourizedLog)} - - )} - - ); -}; diff --git a/workspaces/wi/wi-webviews/src/views/ImportIntegration/components/MigrationStatusContent.tsx b/workspaces/wi/wi-webviews/src/views/ImportIntegration/components/MigrationStatusContent.tsx deleted file mode 100644 index e5d2790e5b9..00000000000 --- a/workspaces/wi/wi-webviews/src/views/ImportIntegration/components/MigrationStatusContent.tsx +++ /dev/null @@ -1,83 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { ProgressRing, Typography } from "@wso2/ui-toolkit"; -import React from "react"; -import { MigrationDisplayState, MigrationReportJSON } from "../types"; -import { CoverageSummary } from "./CoverageSummary"; -import { ReportButtons } from "./ReportButtons"; -import { ImportIntegrationResponse } from "@wso2/wi-core"; - -interface MigrationStatusContentProps { - state: MigrationDisplayState; - migrationState: string | null; - migrationResponse: ImportIntegrationResponse | null; - parsedReportData: MigrationReportJSON | null; - onViewReport: () => void; - onSaveReport: () => void; -} - -export const MigrationStatusContent: React.FC = ({ - state, - migrationState, - migrationResponse, - parsedReportData, - onViewReport, - onSaveReport -}) => { - if (state.isInProgress) { - return ( -
- - - {migrationState || "Starting migration..."} - -
- ); - } - - if (state.isFailed) { - return ( - - Migration error: {migrationResponse.error} - - ); - } - - if (state.isSuccess) { - if (state.hasReportData && parsedReportData) { - return ( - - ); - } else { - return ( - <> - {migrationResponse?.report && ( - - )} - - ); - } - } - - return null; -}; diff --git a/workspaces/wi/wi-webviews/src/views/ImportIntegration/components/ReportButtons.tsx b/workspaces/wi/wi-webviews/src/views/ImportIntegration/components/ReportButtons.tsx deleted file mode 100644 index a736bea11a3..00000000000 --- a/workspaces/wi/wi-webviews/src/views/ImportIntegration/components/ReportButtons.tsx +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { Codicon } from "@wso2/ui-toolkit"; -import React from "react"; -import { - ReportButtonsContainer, - SaveReportButton, - ViewReportButton, -} from "../styles"; - -interface ReportButtonsProps { - onViewReport: () => void; - onSaveReport: () => void; -} - -export const ReportButtons: React.FC = ({ - onViewReport, - onSaveReport, -}) => { - return ( - - - -  View Full Report - - - -  Save Report - - - ); -}; diff --git a/workspaces/wi/wi-webviews/src/views/ImportIntegration/index.tsx b/workspaces/wi/wi-webviews/src/views/ImportIntegration/index.tsx deleted file mode 100644 index 3b60556e87d..00000000000 --- a/workspaces/wi/wi-webviews/src/views/ImportIntegration/index.tsx +++ /dev/null @@ -1,200 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { - BIProjectRequest, - DownloadProgress, - ImportIntegrationResponse, - ImportIntegrationRPCRequest, - MigrateRequest, - MigrationTool -} from "@wso2/wi-core"; -import { Icon, Typography } from "@wso2/ui-toolkit"; -import { Stepper, StepperContainer } from "@wso2/ui-toolkit/lib/components/Stepper/Stepper"; -import { useEffect, useState } from "react"; -import { ConfigureProjectForm } from "./ConfigureProjectForm"; -import { ImportIntegrationForm } from "./ImportIntegrationForm"; -import { MigrationProgressView } from "./MigrationProgressView"; -import { FormContainer, TitleContainer, IconButton } from "./styles"; -import { FinalIntegrationParams } from "./types"; -import { useVisualizerContext } from "../../contexts"; - -export function ImportIntegration({ onBack }: { onBack?: () => void }) { - const { rpcClient } = useVisualizerContext(); - - // State managed by the parent component - const [step, setStep] = useState(0); - const [toolPullProgress, setToolPullProgress] = useState(null); - const [migrationToolState, setMigrationToolState] = useState(null); - const [migrationToolLogs, setMigrationToolLogs] = useState([]); - const [pullingTool, setPullingTool] = useState(false); - const [selectedIntegration, setSelectedIntegration] = useState(null); - const [migrationTools, setMigrationTools] = useState([]); - const [importParams, setImportParams] = useState(null); - const [migrationCompleted, setMigrationCompleted] = useState(false); - const [migrationSuccessful, setMigrationSuccessful] = useState(false); - const [migrationResponse, setMigrationResponse] = useState(null); - - const defaultSteps = ["Select Source Project", "Migration Status", "Create and Open Project"]; - - const pullIntegrationTool = (commandName: string, version: string) => { - setPullingTool(true); - rpcClient.getMainRpcClient().pullMigrationTool({ - toolName: commandName, - version: version, - }); - }; - - // Handler to begin the import and switch to the migration progress view - const handleStartImport = ( - importParams: FinalIntegrationParams, - selectedIntegration: MigrationTool, - toolPullProgress: DownloadProgress - ) => { - if (selectedIntegration.needToPull && toolPullProgress && toolPullProgress.step === -1) { - console.error("Cannot start import, tool download failed."); - } - setStep(1); - console.log("Starting import with params:", importParams); - - const params: ImportIntegrationRPCRequest = { - packageName: "", - commandName: selectedIntegration.commandName, - sourcePath: importParams.importSourcePath, - parameters: importParams.parameters, - }; - rpcClient - .getMainRpcClient() - .importIntegration(params) - .then((response) => { - setMigrationCompleted(true); - setMigrationResponse(response); - if (!response.error) { - setMigrationSuccessful(true); - } - }) - .catch((error: any) => { - console.error("Error during TIBCO import:", error); - }); - }; - - const handleCreateIntegrationFiles = (project: BIProjectRequest) => { - console.log("Creating integration files with params:", importParams); - if (migrationResponse) { - const params: MigrateRequest = { - project: project, - textEdits: migrationResponse.textEdits, - }; - rpcClient.getMainRpcClient().migrateProject(params); - } - }; - - const handleStepBack = () => { - if (step === 1) { - setMigrationToolState(null); - setMigrationToolLogs([]); - setMigrationCompleted(false); - setMigrationSuccessful(false); - setMigrationResponse(null); - } - - setStep(step - 1); - }; - - const getMigrationTools = () => { - rpcClient - .getMainRpcClient() - .getMigrationTools() - .then((response) => { - console.log("Available migration tools:", response.tools); - setMigrationTools(response.tools); - }); - }; - - useEffect(() => { - getMigrationTools(); - - rpcClient.onDownloadProgress((progressUpdate) => { - setToolPullProgress(progressUpdate); - if (progressUpdate.success) { - setPullingTool(false); - } - - if (progressUpdate.step === -1) { - setPullingTool(false); - rpcClient.getMainRpcClient().showErrorMessage({ message: progressUpdate.message }) - } - }); - - rpcClient.onMigrationToolStateChanged((state) => { - setMigrationToolState(state); - }); - - rpcClient.onMigrationToolLogs((log) => { - setMigrationToolLogs((prevLogs) => [...prevLogs, log]); - }); - }, [rpcClient]); - - useEffect(() => { - if (selectedIntegration?.needToPull && toolPullProgress && toolPullProgress.success && importParams) { - handleStartImport(importParams, selectedIntegration, toolPullProgress); - } - }, [toolPullProgress, importParams, selectedIntegration]); - - return ( -
- - - - - - Migrate External Integration - - - - - - {step === 0 && ( - - )} - {step === 1 && ( - setStep(2)} - onBack={handleStepBack} - /> - )} - {step === 2 && } - -
- ); -} diff --git a/workspaces/wi/wi-webviews/src/views/ImportIntegration/styles.ts b/workspaces/wi/wi-webviews/src/views/ImportIntegration/styles.ts deleted file mode 100644 index c21defdf385..00000000000 --- a/workspaces/wi/wi-webviews/src/views/ImportIntegration/styles.ts +++ /dev/null @@ -1,359 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import styled from "@emotion/styled"; -import { Button, Codicon, Typography } from "@wso2/ui-toolkit"; - -// Main container styles -export const FormContainer = styled.div` - max-width: 660px; - margin: 80px 120px; - height: calc(100vh - 160px); - overflow-y: auto; - - /* Ensure dropdowns have proper stacking context */ - position: relative; - z-index: 1; -`; - -export const TitleContainer = styled.div` - display: flex; - align-items: center; - gap: 8px; - margin-bottom: 32px; -`; - -export const IconButton = styled.div` - cursor: pointer; - border-radius: 4px; - width: 20px; - height: 20px; - font-size: 20px; - &:hover { - background-color: var(--vscode-toolbar-hoverBackground); - } -`; - -export const ButtonWrapper = styled.div` - margin-top: 20px; - display: flex; - justify-content: flex-end; -`; - -// Form-specific styles -export const IntegrationCardGrid = styled.div` - display: flex; - flex-direction: row; - flex-wrap: wrap; - gap: 12px; - margin: 20px 0; -`; - -export const ParametersSection = styled.div` - margin: 20px 0; -`; - -export const PathText = styled.div` - font-family: var(--vscode-editor-font-family); - padding: 4px 0; - opacity: 0.8; -`; - -export const ParameterItem = styled.div` - margin-bottom: 12px; - &:last-child { - margin-bottom: 0; - } -`; - -// Configure Project Form styles -export const InputPreviewWrapper = styled.div` - display: flex; - flex-direction: column; - gap: 3px; - margin: 20px 0; -`; - -export const PreviewText = styled(Typography)` - color: var(--vscode-sideBarTitle-foreground); - opacity: 0.5; - font-family: var(--vscode-editor-font-family, "Monaco", "Menlo", "Ubuntu Mono", monospace); - word-break: break-all; - min-width: 100px; - display: flex; - align-items: center; - line-height: 1; -`; - -export const PreviewIcon = styled(Codicon)` - display: flex; - align-items: center; -`; - -export const PreviewContainer = styled.div` - border: 1px solid var(--vscode-input-border); - border-radius: 4px; - padding: 8px 12px; - display: inline-flex; - align-items: center; - width: fit-content; - height: 28px; - gap: 8px; - background-color: var(--vscode-editor-background); - * { - cursor: default !important; - } -`; - -export const LocationSelectorWrapper = styled.div` - margin-top: 20px; - display: flex; - flex-direction: column; - gap: 8px; -`; - -// Migration Progress styles -export const ProgressContainer = styled.div` - max-width: 660px; - margin: 80px 120px; - display: flex; - flex-direction: column; - gap: 40px; - max-height: 100vh; - overflow-y: auto; - padding-bottom: 20px; -`; - -export const StepWrapper = styled.div` - display: flex; - flex-direction: column; - gap: 5px; - align-items: flex-start; - margin-top: 20px; -`; - -export const LogsContainer = styled.div` - border: 1px solid var(--vscode-widget-border); - border-radius: 4px; - padding: 16px; - background-color: var(--vscode-editor-background); - max-height: 300px; - overflow-y: auto; - font-family: var(--vscode-editor-font-family); - font-size: var(--vscode-editor-font-size); -`; - -export const LogEntry = styled.div` - color: var(--vscode-foreground); - margin-bottom: 4px; - white-space: pre-wrap; - word-break: break-word; -`; - -export const CollapsibleHeader = styled.div` - display: flex; - cursor: pointer; - gap: 8px; - align-items: center; - &:hover { - opacity: 0.8; - } -`; - -export const CardAction = styled.div` - margin-left: auto; -`; - -// Coverage Summary styles -export const CoverageContainer = styled.div` - border: 1px solid var(--vscode-widget-border); - border-radius: 4px; - padding: 24px; - background-color: var(--vscode-editor-background); - display: flex; - flex-direction: column; - gap: 16px; - width: 100%; -`; - -export const CoverageHeader = styled.div` - display: flex; - align-items: center; - gap: 16px; - justify-content: space-between; -`; - -export const CoveragePercentage = styled.div<{ coverageColor: string }>` - font-size: 48px; - font-weight: bold; - color: ${(props: { coverageColor: string }) => props.coverageColor}; -`; - -export const CoverageLabel = styled.div` - font-size: 14px; - color: var(--vscode-descriptionForeground); -`; - -export const CoverageProgressBar = styled.div` - width: 100%; - height: 8px; - background-color: var(--vscode-editorWidget-border); - border-radius: 4px; - overflow: hidden; -`; - -export const CoverageProgressFill = styled.div<{ percentage: number; coverageColor: string }>` - height: 100%; - width: ${(props: { percentage: number; coverageColor: string }) => props.percentage}%; - background-color: ${(props: { percentage: number; coverageColor: string }) => props.coverageColor}; - transition: width 0.3s ease; -`; - -export const CoverageStats = styled.div` - display: flex; - flex-direction: column; - gap: 8px; -`; - -export const CoverageStat = styled.div` - display: flex; - justify-content: space-between; - font-size: 14px; -`; - -export const CoverageBadge = styled.div` - background-color: var(--vscode-badge-background); - color: var(--vscode-badge-foreground); - padding: 4px 12px; - border-radius: 12px; - font-size: 12px; - font-weight: 500; - text-transform: uppercase; - align-self: flex-start; -`; - -// Estimation Table styles -export const EstimationTableContainer = styled.div` - border: 1px solid var(--vscode-widget-border); - border-radius: 4px; - padding: 24px; - background-color: var(--vscode-editor-background); - display: flex; - flex-direction: column; - gap: 16px; - width: 100%; -`; - -export const ReportButtonsContainer = styled.div` - display: flex; - gap: 12px; - align-self: flex-start; - margin-top: 8px; -`; - -export const ViewReportButton = styled(Button)``; - -export const SaveReportButton = styled(Button)``; - -export const NextButtonWrapper = styled.div` - display: flex; - justify-content: flex-end; - margin-top: 16px; - width: 100%; -`; - -// ImportIntegrationForm specific styles -export const FolderSelectionContainer = styled.div` - display: flex; - justify-content: flex-start; - margin: 16px 0; -`; - -export const SelectedFolderContainer = styled.div` - margin: 16px 0; -`; - -export const SelectedFolderDisplay = styled.div` - padding: 12px 16px; - background-color: var(--vscode-editor-background); - border: 1px solid var(--vscode-input-border); - border-radius: 4px; - display: flex; - justify-content: space-between; - align-items: center; -`; - -export const FolderPathText = styled.span` - font-family: var(--vscode-editor-font-family); -`; - -export const StepContainer = styled.div` - margin-top: 20px; -`; - -export const ViewWrapper = styled.div` - padding: 16px; -`; - -export const Text = styled.p` - font-size: 14px; - color: var(--vscode-sideBarTitle-foreground); -`; - -export const BodyText = styled(Text)` - color: var(--vscode-sideBarTitle-foreground); - margin: 0 0 8px; - opacity: 0.5; -`; - -export const BodyTinyInfo = styled(Text)` - color: var(--vscode-descriptionForeground); - margin: 0 0 8px; - font-weight: normal; - font-size: 14px; - letter-spacing: 0.39px; -`; - -export const LoadingContainer = styled.div` - display: flex; - justify-content: center; - align-items: center; - height: 80vh; - flex-direction: column; -`; - -export const LoadingOverlayContainer = styled.div` - display: flex; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - opacity: 0.7; - background-color: var(--vscode-editor-background); - justify-content: center; - align-items: center; - flex-direction: column; -`; - -export const TopBar = styled.div` - display: flex; - justify-content: space-between; - align-items: center; - padding-bottom: 16px; -`; diff --git a/workspaces/wi/wi-webviews/src/views/ImportIntegration/types.ts b/workspaces/wi/wi-webviews/src/views/ImportIntegration/types.ts deleted file mode 100644 index 31f652aff6c..00000000000 --- a/workspaces/wi/wi-webviews/src/views/ImportIntegration/types.ts +++ /dev/null @@ -1,85 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { DownloadProgress, ImportIntegrationResponse, MigrationTool, BIProjectRequest } from "@wso2/wi-core"; - -export interface FinalIntegrationParams { - importSourcePath: string; - type: string; - parameters?: Record; -} - -export enum CoverageLevel { - HIGH = "high", - MEDIUM = "medium", - LOW = "low" -} - -export interface CoverageOverview { - unitName: string; - coveragePercentage: number; - coverageLevel: CoverageLevel; - totalElements: number; - migratableElements: number; - nonMigratableElements: number; -} - - -export interface MigrationReportJSON { - coverageOverview: CoverageOverview; -} - -export interface ImportIntegrationFormProps { - selectedIntegration: MigrationTool | null; - migrationTools: MigrationTool[]; - pullIntegrationTool: (integrationType: string, version: string) => void; - pullingTool: boolean; - toolPullProgress: DownloadProgress | null; - setImportParams: (params: FinalIntegrationParams) => void; - onSelectIntegration: (selectedIntegration: MigrationTool) => void; - handleStartImport: ( - importParams: FinalIntegrationParams, - selectedIntegration: MigrationTool, - toolPullProgress: DownloadProgress - ) => void; - onBack: () => void; -} - -export interface MigrationProgressProps { - migrationState: string | null; - migrationLogs: string[]; - migrationCompleted: boolean; - migrationSuccessful: boolean; - migrationResponse: ImportIntegrationResponse | null; - onNext: () => void; - onBack: () => void; -} - -export interface ConfigureProjectFormProps { - onNext: (project: BIProjectRequest) => void; - onBack: () => void; -} - -export interface MigrationDisplayState { - isInProgress: boolean; - isSuccess: boolean; - isFailed: boolean; - hasReportData: boolean; - showButtonsInStep: boolean; - showButtonsAfterLogs: boolean; -} diff --git a/workspaces/wi/wi-webviews/src/views/ImportIntegration/utils.ts b/workspaces/wi/wi-webviews/src/views/ImportIntegration/utils.ts deleted file mode 100644 index db255ae0674..00000000000 --- a/workspaces/wi/wi-webviews/src/views/ImportIntegration/utils.ts +++ /dev/null @@ -1,83 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { MigrationTool } from "@wso2/wi-core"; -import { CoverageLevel, MigrationDisplayState } from "./types"; - -export const SELECTION_TEXT = "To begin, choose a source platform from the options above."; -const IMPORT_DISABLED_TOOLTIP = "Please select a source platform to continue."; -const PATH_SELECTION_TOOLTIP = "Please select a project folder to continue."; -const IMPORT_ENABLED_TOOLTIP = "Begin converting your selected project and view the progress."; - -export const getImportTooltip = (selectedIntegration: MigrationTool, importSourcePath: string) => { - if (!selectedIntegration) { - return IMPORT_DISABLED_TOOLTIP; - } - if (importSourcePath.length < 2) { - return PATH_SELECTION_TOOLTIP; - } - return IMPORT_ENABLED_TOOLTIP; -}; - -export const sanitizeProjectName = (name: string): string => { - return name.replace(/[^a-z0-9]/gi, "_").toLowerCase(); -}; - -export const getCoverageLevel = (level: CoverageLevel): string => { - if (level.toLowerCase() === CoverageLevel.HIGH) return "HIGH COVERAGE"; - if (level.toLowerCase() === CoverageLevel.MEDIUM) return "MEDIUM COVERAGE"; - return "LOW COVERAGE"; -}; - -export const getCoverageColor = (level: CoverageLevel): string => { - if (level.toLowerCase() === CoverageLevel.HIGH) return "var(--vscode-charts-green)"; - if (level.toLowerCase() === CoverageLevel.MEDIUM) return "var(--vscode-charts-orange)"; - return "var(--vscode-charts-red)"; -}; - -export const getMigrationProgressHeaderData = (state: MigrationDisplayState) => { - let headerText; - let headerDesc; - - if (state.isSuccess) { - headerText = "Migration Completed Successfully!"; - headerDesc = - "Your integration project has been successfully migrated. You can now proceed to the final step to create and open your project."; - } else if (state.isFailed) { - headerText = "Migration Failed"; - headerDesc = "The migration process encountered errors and could not be completed."; - } else if (state.isInProgress) { - headerText = "Migration in Progress..."; - headerDesc = "Please wait while we set up your new integration project."; - } - - return { headerText, headerDesc }; -}; - -export const getMigrationDisplayState = ( - migrationCompleted: boolean, - migrationSuccessful: boolean, - hasReportData: boolean -): MigrationDisplayState => ({ - isInProgress: !migrationCompleted, - isSuccess: migrationCompleted && migrationSuccessful, - isFailed: migrationCompleted && !migrationSuccessful, - hasReportData, - showButtonsInStep: migrationCompleted && migrationSuccessful, - showButtonsAfterLogs: !migrationCompleted || (migrationCompleted && !migrationSuccessful) -}); diff --git a/workspaces/wi/wi-webviews/src/views/WelcomeView.css b/workspaces/wi/wi-webviews/src/views/WelcomeView.css deleted file mode 100644 index 64c58119c22..00000000000 --- a/workspaces/wi/wi-webviews/src/views/WelcomeView.css +++ /dev/null @@ -1,167 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -.welcome-container { - padding: 2rem; - max-width: 1200px; - margin: 0 auto; - font-family: var(--vscode-font-family); -} - -.welcome-header { - text-align: center; - margin-bottom: 3rem; -} - -.welcome-header h1 { - font-size: 2.5rem; - margin-bottom: 0.5rem; - color: var(--vscode-foreground); -} - -.welcome-subtitle { - font-size: 1.1rem; - color: var(--vscode-descriptionForeground); -} - -.integrations-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); - gap: 2rem; - margin-bottom: 3rem; -} - -.integration-card { - background-color: var(--vscode-editor-background); - border: 1px solid var(--vscode-panel-border); - border-radius: 8px; - padding: 2rem; - transition: transform 0.2s, box-shadow 0.2s; -} - -.integration-card:hover { - transform: translateY(-4px); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); -} - -.integration-card.unavailable { - opacity: 0.6; -} - -.card-icon { - width: 64px; - height: 64px; - border-radius: 12px; - display: flex; - align-items: center; - justify-content: center; - margin-bottom: 1rem; - font-size: 1.5rem; - font-weight: bold; - color: white; -} - -.bi-icon { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); -} - -.mi-icon { - background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); -} - -.integration-card h2 { - font-size: 1.5rem; - margin-bottom: 0.5rem; - color: var(--vscode-foreground); -} - -.integration-card p { - color: var(--vscode-descriptionForeground); - line-height: 1.6; - margin-bottom: 1.5rem; -} - -.primary-button { - background-color: var(--vscode-button-background); - color: var(--vscode-button-foreground); - border: none; - padding: 0.75rem 1.5rem; - border-radius: 4px; - font-size: 1rem; - cursor: pointer; - transition: background-color 0.2s; -} - -.primary-button:hover { - background-color: var(--vscode-button-hoverBackground); -} - -.not-available { - padding: 1rem; - background-color: var(--vscode-inputValidation-warningBackground); - border: 1px solid var(--vscode-inputValidation-warningBorder); - border-radius: 4px; -} - -.warning-text { - color: var(--vscode-inputValidation-warningForeground); - font-weight: bold; - margin-bottom: 0.5rem; -} - -.help-text { - color: var(--vscode-descriptionForeground); - font-size: 0.9rem; -} - -.quick-links { - margin-top: 3rem; -} - -.quick-links h3 { - font-size: 1.5rem; - margin-bottom: 1rem; - color: var(--vscode-foreground); -} - -.links-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 1rem; -} - -.link-card { - display: flex; - align-items: center; - gap: 0.75rem; - padding: 1rem; - background-color: var(--vscode-editor-background); - border: 1px solid var(--vscode-panel-border); - border-radius: 4px; - text-decoration: none; - color: var(--vscode-textLink-foreground); - transition: background-color 0.2s; -} - -.link-card:hover { - background-color: var(--vscode-list-hoverBackground); -} - -.link-icon { - font-size: 1.5rem; -} diff --git a/workspaces/wi/wi-webviews/src/views/WelcomeView.tsx b/workspaces/wi/wi-webviews/src/views/WelcomeView.tsx deleted file mode 100644 index 62e15de9960..00000000000 --- a/workspaces/wi/wi-webviews/src/views/WelcomeView.tsx +++ /dev/null @@ -1,495 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import React, { useState } from "react"; -import "./WelcomeView.css"; -import styled from "@emotion/styled"; -import { Button, Codicon, Icon } from "@wso2/ui-toolkit"; -import { CreationView } from "./creationView"; -import { ImportIntegration } from "./ImportIntegration"; -import { SamplesView } from "./samplesView"; - -enum ViewState { - WELCOME = "welcome", - CREATE_PROJECT = "create_project", - SAMPLES = "samples", - IMPORT_EXTERNAL = "import_external" -} - -const Wrapper = styled.div` - max-width: 100%; - margin: 0; - padding: 0; - height: 100vh; - overflow-y: auto; - font-family: var(--vscode-font-family); - background: var(--vscode-sideBar-background); -`; - -const TopSection = styled.div` - background: linear-gradient(135deg, #667eea 0%, #204377 100%); - padding: 40px 60px 80px; - position: relative; - display: flex; - flex-direction: column; -`; - -const ConfigureButton = styled(Button)` - position: absolute; - top: 40px; - right: 60px; - height: 33px !important; - font-size: 14px; - font-weight: 500; - border-radius: 8px; - padding: 0 24px; - background: var(--button-secondary-background); - color: white; - border: none; - transition: all 0.2s ease; - display: flex; - align-items: center; - gap: 8px; - - &:hover:not(:disabled) { - background: var(--button-secondary-hover-background); - transform: translateY(-1px); - } - - &:disabled { - opacity: 0.5; - cursor: not-allowed; - } -`; - -const GetStartedBadge = styled.div` - display: inline-block; - background: rgba(255, 255, 255, 0.2); - backdrop-filter: blur(10px); - border: 1px solid rgba(255, 255, 255, 0.3); - border-radius: 20px; - padding: 8px 16px; - margin-bottom: 24px; - font-size: 13px; - color: white; - font-weight: 500; - width: 106px; -`; - -const Headline = styled.h1` - font-size: 48px; - font-weight: 700; - margin: 0; - color: white; - line-height: 1.2; - letter-spacing: -0.5px; -`; - -const Caption = styled.p` - font-size: 16px; - line-height: 1.6; - font-weight: 400; - color: rgba(255, 255, 255, 0.9); - margin: 16px 0 0 0; - max-width: 800px; -`; - -const CardsContainer = styled.div` - padding: 0 60px 60px; - margin-top: -40px; - position: relative; - z-index: 1; -`; - -const CardsGrid = styled.div` - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 24px; - - @media (max-width: 1200px) { - grid-template-columns: repeat(2, 1fr); - } - - @media (max-width: 768px) { - grid-template-columns: 1fr; - } -`; - -interface ActionCardProps { - isPrimary?: boolean; - disabled?: boolean; -} - -const ActionCard = styled.div` - background: var(--vscode-editor-background); - border-radius: 12px; - padding: 32px 24px; - display: flex; - flex-direction: column; - transition: all 0.3s ease; - cursor: ${(props: ActionCardProps) => (props.disabled ? "not-allowed" : "pointer")}; - opacity: ${(props: ActionCardProps) => (props.disabled ? 0.6 : 1)}; - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); - border: 1px solid var(--vscode-widget-border, rgba(255, 255, 255, 0.1)); - min-height: 280px; - - &:hover { - ${(props: ActionCardProps) => - !props.disabled && - ` - transform: translateY(-4px); - box-shadow: 0 8px 16px rgba(0,0,0,0.25); - background: var(--vscode-list-hoverBackground); - `} - } -`; - -interface CardIconProps { - bgColor?: string; -} - -const CardIconContainer = styled.div` - display: flex; - justify-content: flex-start; - margin-bottom: 20px; -`; - -const CardIcon = styled.div` - width: 56px; - height: 56px; - border-radius: 12px; - display: flex; - align-items: center; - justify-content: center; - background: ${(props: CardIconProps) => props.bgColor || "linear-gradient(135deg, #667eea 0%, #764ba2 100%)"}; - color: white; - flex-shrink: 0; -`; - -const CardContent = styled.div` - flex: 1; - display: flex; - flex-direction: column; -`; - -const CardTitle = styled.h3` - font-size: 20px; - font-weight: 600; - margin: 0 0 12px 0; - color: var(--vscode-foreground); -`; - -const CardDescription = styled.p` - font-size: 14px; - line-height: 1.6; - margin: 0 0 24px 0; - color: var(--vscode-descriptionForeground); - flex: 1; -`; - -const StyledButton = styled(Button) <{ isPrimary?: boolean }>` - height: 44px; - font-size: 14px; - font-weight: 500; - border-radius: 8px; - align-self: flex-start; - padding: 0 24px; - background: ${(props: { isPrimary?: boolean }) => - props.isPrimary ? 'var(--button-primary-background)' : 'var(--button-secondary-background)'}; - color: white; - border: none; - transition: all 0.2s ease; - - &:hover:not(:disabled) { - background: ${(props: { isPrimary?: boolean }) => - props.isPrimary ? 'var(--button-primary-hover-background)' : 'var(--button-secondary-hover-background)'}; - transform: translateY(-1px); - } - - &:disabled { - opacity: 0.5; - cursor: not-allowed; - } -`; - -const ButtonContent = styled.div` - display: flex; - align-items: center; - justify-content: center; - gap: 8px; -`; - -const BottomSection = styled.div` - padding: 60px 60px 60px; - text-align: center; -`; - -const AlreadyHaveText = styled.div` - font-size: 14px; - color: var(--vscode-foreground); - opacity: 0.6; - margin-bottom: 32px; - - a { - color: var(--vscode-textLink-foreground); - text-decoration: none; - font-weight: 400; - margin-left: 6px; - cursor: pointer; - - &:hover { - color: var(--vscode-textLink-activeForeground); - text-decoration: underline; - } - } -`; - -const RecentProjectsSection = styled.div` - max-width: 900px; - margin: 0 auto; -`; - -const RecentProjectsHeader = styled.div` - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 20px; - padding: 0 4px; -`; - -const RecentProjectsTitle = styled.h3` - font-size: 13px; - font-weight: 400; - color: var(--vscode-foreground); - opacity: 0.6; - margin: 0; - text-transform: capitalize; -`; - -const ViewAllLink = styled.a` - font-size: 13px; - color: var(--vscode-textLink-foreground); - text-decoration: none; - cursor: pointer; - font-weight: 400; - - &:hover { - color: var(--vscode-textLink-activeForeground); - text-decoration: underline; - } -`; - -const ProjectsList = styled.div` - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 8px 16px; - text-align: left; -`; - -const ProjectItem = styled.div` - display: flex; - justify-content: space-between; - align-items: center; - padding: 8px 4px; - font-size: 13px; - color: var(--vscode-foreground); - cursor: pointer; - transition: all 0.15s ease; - border-radius: 4px; - - &:hover { - background: var(--vscode-list-hoverBackground); - } -`; - -const ProjectPath = styled.span` - color: var(--vscode-descriptionForeground); - font-size: 12px; - margin-left: 12px; -`; - -export const WelcomeView: React.FC = () => { - const [currentView, setCurrentView] = useState(ViewState.WELCOME); - - const goToCreateProject = () => { - setCurrentView(ViewState.CREATE_PROJECT); - }; - - const goToSamples = () => { - setCurrentView(ViewState.SAMPLES); - }; - - const goToImportExternal = () => { - setCurrentView(ViewState.IMPORT_EXTERNAL); - }; - - const goBackToWelcome = () => { - setCurrentView(ViewState.WELCOME); - }; - - const openConfigure = () => { - // Add configure action here - console.log("Configure clicked"); - }; - - const openProject = () => { - // Add open existing project action here - console.log("Open existing project"); - }; - - const viewAllProjects = () => { - // Add view all projects action here - console.log("View all projects"); - }; - - // Sample recent projects data - replace with actual data - const recentProjects = [ - { name: "vscode-extensions", path: "~/Documents/vscode-extension" }, - { name: "evox-esports-site", path: "~/Documents" }, - { name: "iso-consultancy-portal", path: "~/Documents/ISOWeb" }, - { name: "ISOWeb", path: "~/Documents" }, - { name: "Documents", path: "~" }, - ]; - - // Helper function to render current view content - const renderCurrentView = () => { - switch (currentView) { - case ViewState.CREATE_PROJECT: - return ; - case ViewState.SAMPLES: - return ( - - ); - case ViewState.IMPORT_EXTERNAL: - return ( - - ); - case ViewState.WELCOME: - default: - return renderWelcomeContent(); - } - }; - - const renderWelcomeContent = () => ( - <> - - - - - Configure - - - Get Started - WSO2 Integrator - - A comprehensive integration solution that simplifies your digital transformation journey. Streamlines connectivity among applications, services, data, and cloud using a user-friendly low-code graphical designing experience. - - - - - - - - - - - - - Create New Project - - Ready to build? Start a new integration project using our intuitive graphical designer. - - { e.stopPropagation(); goToCreateProject(); }}> - Create - - - - - - - - - - - - Explore Samples - - Need inspiration? Browse through sample projects to see how WSO2 Integrator works in real-world scenarios. - - { e.stopPropagation(); goToSamples(); }}> - Explore - - - - - - - - - - - - Import External Integration - - Have an integration from another platform? Import your MuleSoft or TIBCO integration project and continue building. - - { e.stopPropagation(); goToImportExternal(); }}> - Import - - - - - - - - - Already have a project? - Open - - - - - Recent projects - View all (11) - - - {recentProjects.map((project, index) => ( - console.log(`Open project: ${project.name}`)}> - {project.name} - {project.path} - - ))} - - - - - ); - - return ( - - {renderCurrentView()} - - ); -}; diff --git a/workspaces/wi/wi-webviews/src/views/creationView/biForm/ProjectFormFields.tsx b/workspaces/wi/wi-webviews/src/views/creationView/biForm/ProjectFormFields.tsx deleted file mode 100644 index abc398866f2..00000000000 --- a/workspaces/wi/wi-webviews/src/views/creationView/biForm/ProjectFormFields.tsx +++ /dev/null @@ -1,207 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { useEffect, useState } from "react"; -import { LocationSelector, TextField, CheckBox, LinkButton, ThemeColors, Codicon } from "@wso2/ui-toolkit"; -import styled from "@emotion/styled"; -import { useVisualizerContext } from "../../../contexts/RpcContext"; -import { sanitizePackageName, validatePackageName } from "./utils"; - -const FieldGroup = styled.div` - margin-bottom: 20px; -`; - -const CheckboxContainer = styled.div` - margin: 16px 0; -`; - -const OptionalConfigRow = styled.div` - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - width: 100%; - margin-bottom: 8px; -`; - -const OptionalConfigButtonContainer = styled.div` - display: flex; - flex-direction: row; - flex-grow: 1; - justify-content: flex-end; -`; - -const OptionalConfigContent = styled.div` - margin-top: 16px; -`; - -export interface ProjectFormData { - integrationName: string; - packageName: string; - path: string; - createDirectory: boolean; - orgName: string; - version: string; -} - -export interface ProjectFormFieldsProps { - formData: ProjectFormData; - onFormDataChange: (data: Partial) => void; - onValidationChange?: (isValid: boolean) => void; -} - -export function ProjectFormFields({ formData, onFormDataChange, onValidationChange }: ProjectFormFieldsProps) { - const { rpcClient } = useVisualizerContext(); - const [packageNameTouched, setPackageNameTouched] = useState(false); - const [showOptionalConfigurations, setShowOptionalConfigurations] = useState(false); - const [packageNameError, setPackageNameError] = useState(null); - - const handleIntegrationName = (value: string) => { - onFormDataChange({ integrationName: value }); - // Auto-populate package name if user hasn't manually edited it - if (!packageNameTouched) { - onFormDataChange({ packageName: sanitizePackageName(value) }); - } - }; - - const handlePackageName = (value: string) => { - // Allow dots and other characters while typing - const sanitized = sanitizePackageName(value); - onFormDataChange({ packageName: sanitized }); - setPackageNameTouched(value.length > 0); - // Clear error while typing - if (packageNameError) { - setPackageNameError(null); - } - }; - - const handleProjectDirSelection = async () => { - const projectDirectory = await rpcClient.getMainRpcClient().selectFileOrDirPath({}); - onFormDataChange({ path: projectDirectory.path }); - }; const handleShowOptionalConfigurations = () => { - setShowOptionalConfigurations(true); - }; - - const handleHideOptionalConfigurations = () => { - setShowOptionalConfigurations(false); - }; - - useEffect(() => { - (async () => { - if (!formData.path) { - const currentDir = await rpcClient.getMainRpcClient().getWorkspaceRoot(); - onFormDataChange({ path: currentDir.path }); - } - })(); - }, []); - - // Effect to trigger validation when requested by parent - useEffect(() => { - const error = validatePackageName(formData.packageName, formData.integrationName); - setPackageNameError(error); - onValidationChange?.(error === null); - }, [formData.packageName, onValidationChange]); - - return ( - <> - - - - - - - - - - - - - onFormDataChange({ createDirectory: checked })} - /> - - - - - Optional Configurations - - {!showOptionalConfigurations && ( - - - Expand - - )} - {showOptionalConfigurations && ( - - - Collapse - - )} - - - - {showOptionalConfigurations && ( - - - onFormDataChange({ orgName: value })} - value={formData.orgName} - label="Organization Name" - description="The organization that owns this Ballerina package." - /> - - - onFormDataChange({ version: value })} - value={formData.version} - label="Package Version" - placeholder="0.1.0" - description="Version of the Ballerina package." - /> - - - )} - - ); -} diff --git a/workspaces/wi/wi-webviews/src/views/creationView/biForm/index.tsx b/workspaces/wi/wi-webviews/src/views/creationView/biForm/index.tsx deleted file mode 100644 index 712dda7b506..00000000000 --- a/workspaces/wi/wi-webviews/src/views/creationView/biForm/index.tsx +++ /dev/null @@ -1,78 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { useState } from "react"; -import { - Button, -} from "@wso2/ui-toolkit"; -import styled from "@emotion/styled"; -import { ProjectFormFields, ProjectFormData } from "./ProjectFormFields"; -import { isFormValid } from "./utils"; -import { useVisualizerContext } from "../../../contexts"; - -const ButtonWrapper = styled.div` - margin-top: 20px; - display: flex; - justify-content: flex-end; -`; - -export function BIProjectForm() { - const { rpcClient } = useVisualizerContext(); - const [formData, setFormData] = useState({ - integrationName: "", - packageName: "", - path: "", - createDirectory: true, - orgName: "", - version: "", - }); - - const handleFormDataChange = (data: Partial) => { - setFormData(prev => ({ ...prev, ...data })); - }; - - const handleCreateProject = () => { - rpcClient.getMainRpcClient().createBIProject({ - projectName: formData.integrationName, - packageName: formData.packageName, - projectPath: formData.path, - createDirectory: formData.createDirectory, - orgName: formData.orgName || undefined, - version: formData.version || undefined, - }); - }; - - return ( -
- - - - - -
- ); -} diff --git a/workspaces/wi/wi-webviews/src/views/creationView/biForm/utils.ts b/workspaces/wi/wi-webviews/src/views/creationView/biForm/utils.ts deleted file mode 100644 index 8c0ab104b43..00000000000 --- a/workspaces/wi/wi-webviews/src/views/creationView/biForm/utils.ts +++ /dev/null @@ -1,73 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -// Import from the component file since types.ts was removed -import { ProjectFormData } from "./ProjectFormFields"; - -export const isValidPackageName = (name: string): boolean => { - return /^[a-z0-9_.]+$/.test(name); -}; - -export const validatePackageName = (name: string, integrationName: string): string | null => { - if (integrationName.length === 0 && name.length === 0) { - return null; - } - - if (name.length === 0) { - return "Package name is required"; - } - - if (!isValidPackageName(name)) { - return "Package name can only contain lowercase letters, numbers, underscores, and dots"; - } - - if (/__/.test(name)) { - return "Package name cannot have consecutive underscores"; - } - - if (/\.{2,}/.test(name)) { - return "Package name cannot have consecutive dots"; - } - - if (name.endsWith("_")) { - return "Package name cannot end with an underscore"; - } - - if (name.endsWith(".")) { - return "Package name cannot end with a dot"; - } - - return null; // No error -}; - -export const isFormValid = (formData: ProjectFormData): boolean => { - return ( - formData.integrationName.length >= 2 && - formData.packageName.length >= 2 && - formData.path.length >= 2 && - validatePackageName(formData.packageName, formData.integrationName) === null - ); -}; - -export const sanitizePackageName = (name: string): string => { - // Allow dots but sanitize other characters, then convert consecutive dots to single dot - return name - .replace(/[^a-z0-9._]/gi, "_") - .toLowerCase() - .replace(/\.{2,}/g, "."); // Convert multiple consecutive dots to single dot -}; diff --git a/workspaces/wi/wi-webviews/src/views/creationView/index.tsx b/workspaces/wi/wi-webviews/src/views/creationView/index.tsx deleted file mode 100644 index ae253b9778c..00000000000 --- a/workspaces/wi/wi-webviews/src/views/creationView/index.tsx +++ /dev/null @@ -1,130 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { useState, useEffect } from "react"; -import { - Icon, - Typography -} from "@wso2/ui-toolkit"; -import styled from "@emotion/styled"; -import { BIProjectForm } from "./biForm"; -import { useVisualizerContext } from "../../contexts/RpcContext"; -import { MiProjectWizard } from "./miForm"; -import { IntegrationTypeSelector } from "../../components/IntegrationTypeSelector"; - -const FormContainer = styled.div` - display: flex; - flex-direction: column; - margin: 80px 120px; - max-width: 600px; -`; - -const TitleContainer = styled.div` - display: flex; - align-items: center; - gap: 8px; - margin-bottom: 32px; -`; - -const IconButton = styled.div` - cursor: pointer; - border-radius: 4px; - width: 20px; - height: 20px; - font-size: 20px; - &:hover { - background-color: var(--vscode-toolbar-hoverBackground); - } -`; - -const DropdownContainer = styled.div` - margin-bottom: 20px; -`; - -export function CreationView({ onBack }: { onBack?: () => void }) { - const [defaultType, setDefaultType] = useState("WSO2: BI"); - const [projectType, setProjectType] = useState(defaultType); - const [isLoading, setIsLoading] = useState(true); - const { rpcClient } = useVisualizerContext(); - - const projectTypeOptions = [ - { label: "WSO2: BI", value: "WSO2: BI" }, - { label: "WSO2: MI", value: "WSO2: MI" } - ]; - - // Load default integrator from VS Code configuration - useEffect(() => { - const loadDefaultIntegrator = async () => { - try { - const configResponse = await rpcClient.getMainRpcClient().getConfiguration({ - section: "integrator.defaultIntegrator" - }); - - if (configResponse?.value) { - setDefaultType(configResponse.value); - setProjectType(configResponse.value); - } - } catch (error) { - console.warn("Failed to load default integrator config, using fallback:", error); - } finally { - setIsLoading(false); - } - }; - - loadDefaultIntegrator(); - }, []); - - const gotToWelcome = () => { - if (onBack) { - onBack(); - } - }; - - // Show loading while fetching configuration - if (isLoading) { - return ( - -
- Loading... -
-
- ); - } - - return ( -
- - - - - - Create Your Integration - - {defaultType === "WSO2: MI" && ( - - )} - {projectType === "WSO2: BI" && } - {projectType === "WSO2: MI" && } - -
- ); -} diff --git a/workspaces/wi/wi-webviews/src/views/creationView/miForm/index.tsx b/workspaces/wi/wi-webviews/src/views/creationView/miForm/index.tsx deleted file mode 100644 index 98bfd365e0d..00000000000 --- a/workspaces/wi/wi-webviews/src/views/creationView/miForm/index.tsx +++ /dev/null @@ -1,222 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import React, { useEffect, useState } from "react"; -import { Button, Dropdown, FormGroup, LocationSelector, OptionProps, TextField, ProgressRing } from "@wso2/ui-toolkit"; -// import { useVisualizerContext } from "@wso2/mi-rpc-client"; -// import { EVENT_TYPE, MACHINE_VIEW } from "@wso2/mi-core"; -import { yupResolver } from "@hookform/resolvers/yup" -import * as yup from "yup"; -import { useForm } from "react-hook-form"; -import styled from "@emotion/styled"; -import { useVisualizerContext } from "../../../contexts/RpcContext"; -// import { Range } from '../../../../syntax-tree/lib/src'; - - -type InputsFields = { - name: string; - directory: string; - groupID: string; - artifactID: string; - version: string; - miVersion: string; -}; - -const initialEndpoint: InputsFields = { - name: '', - directory: '', - groupID: 'com.microintegrator.projects', - artifactID: 'Sample1', - version: '1.0.0', - miVersion: '', -}; - -const DownloadLabel = styled.div` - margin-top: 10px; - font-size: 12px; - color: #b3b3b3; -`; - -const ButtonWrapper = styled.div` - margin-top: 20px; - display: flex; - justify-content: flex-end; -`; - -const FieldGroup = styled.div` - margin-bottom: 20px; -`; - -export function MiProjectWizard() { - const { rpcClient } = useVisualizerContext(); - const [dirContent, setDirContent] = useState([]); - const [supportedMIVersions, setSupportedMIVersions] = useState([]); - const [formSaved, setFormSaved] = useState(false); - - const loweCasedDirContent = dirContent.map((folder: string) => folder.toLowerCase()); - const schema = yup.object({ - name: yup.string().required("Project Name is required").matches(/^[a-zA-Z0-9_-]([a-zA-Z0-9_-]*\.?[a-zA-Z0-9_-])*$/i, "Project name cannot contain spaces or special characters") - .test('validateFolderName', - 'A subfolder with same name already exists', value => { - return !loweCasedDirContent.includes(value.toLowerCase()) - }), - directory: yup.string().required("Project Directory is required"), - groupID: yup.string().notRequired().default("com.microintegrator.projects").matches(/^[a-zA-Z0-9_-]([a-zA-Z0-9_-]*\.?[a-zA-Z0-9_-])*$/, "Group id cannot contain spaces or special characters"), - artifactID: yup.string().notRequired().matches(/^[a-zA-Z0-9_-]?([a-zA-Z0-9_-]*\.?[a-zA-Z0-9_-])*$/, "Artifact id cannot contain spaces or special characters"), - version: yup.string().notRequired().default("1.0.0").matches(/^[a-zA-Z0-9.]*$/, "Version cannot contain spaces or special characters"), - miVersion: yup.string().required("WSO2 Integrator: MI Runtime version is required").matches(/^[a-zA-Z0-9.]*$/, "WSO2 Integrator: MI Version cannot contain spaces or special characters"), - }); - - const { - register, - formState: { errors, isDirty }, - handleSubmit, - watch, - getValues, - setValue, - } = useForm({ - defaultValues: initialEndpoint, - resolver: yupResolver(schema), - mode: "onChange" - }); - - useEffect(() => { - (async () => { - const currentDir = await rpcClient.getMainRpcClient().getWorkspaceRoot(); - setValue("directory", currentDir.path); - const supportedVersionsResponse = await rpcClient.getMainRpcClient().getSupportedMIVersionsHigherThan(''); - const supportedMIVersions = supportedVersionsResponse.versions.map((version: string) => ({ value: version, content: version })); - setSupportedMIVersions(supportedMIVersions); - setValue("miVersion", supportedVersionsResponse.versions[0]); // Set the first supported version as the default, it is the latest version - const response = await rpcClient.getMainRpcClient().getSubFolderNames({ path: currentDir.path }); - setDirContent(response.folders); - })(); - }, []); - - useEffect(() => { - setValue("artifactID", getValues("name")); - }, [watch("name")]); - - const handleProjecDirSelection = async () => { - const projectDirectory = await rpcClient.getMainRpcClient().askProjectDirPath(); - setValue("directory", projectDirectory.path); - const response = await rpcClient.getMainRpcClient().getSubFolderNames({ path: projectDirectory.path }); - setDirContent(response.folders); - } - - const handleCreateProject = async (values: any) => { - setValue("artifactID", getValues("artifactID") ? getValues("artifactID") : getValues("name")) - const createProjectParams = { - ...values, - open: true, - } - setFormSaved(true); - const response = await rpcClient.getMainRpcClient().createMiProject(createProjectParams); - if (response.filePath === "Error") { - setFormSaved(false); - } else { - // Project created successfully - } - }; - - const onKeyDown = (e: React.KeyboardEvent) => { - if (e.key === 'Enter') { - e.preventDefault(); - if (isDirty) { - handleSubmit(handleCreateProject)(); - } - } - }; - - return ( -
- - - - - - - - - - - - - - - - - - - - If the necessary WSO2 Integrator: MI runtime and tools are not available, you will be prompted to download them after project creation. - - - - -
- ); -} diff --git a/workspaces/wi/wi-webviews/src/views/samplesView/index.tsx b/workspaces/wi/wi-webviews/src/views/samplesView/index.tsx deleted file mode 100644 index 52e42c4a75d..00000000000 --- a/workspaces/wi/wi-webviews/src/views/samplesView/index.tsx +++ /dev/null @@ -1,130 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import { useState, useEffect } from "react"; -import { - Icon, - Typography, - Dropdown, -} from "@wso2/ui-toolkit"; -import styled from "@emotion/styled"; -// import { BIProjectForm } from "./biForm"; -import { useVisualizerContext } from "../../contexts/RpcContext"; -import { MiSamplesView } from "./miSamples"; -import { IntegrationTypeSelector } from "../../components/IntegrationTypeSelector"; - -const FormContainer = styled.div` - display: flex; - flex-direction: column; - margin: 80px 120px; -`; - -const TitleContainer = styled.div` - display: flex; - align-items: center; - gap: 8px; - margin-bottom: 32px; -`; - -const IconButton = styled.div` - cursor: pointer; - border-radius: 4px; - width: 20px; - height: 20px; - font-size: 20px; - &:hover { - background-color: var(--vscode-toolbar-hoverBackground); - } -`; - -const DropdownContainer = styled.div` - margin-bottom: 20px; -`; - -export function SamplesView({ onBack }: { onBack?: () => void }) { - const [defaultType, setDefaultType] = useState("WSO2: BI"); - const [projectType, setProjectType] = useState(defaultType); - const [isLoading, setIsLoading] = useState(true); - const { rpcClient } = useVisualizerContext(); - - const projectTypeOptions = [ - { label: "WSO2: BI", value: "WSO2: BI" }, - { label: "WSO2: MI", value: "WSO2: MI" } - ]; - - // Load default integrator from VS Code configuration - useEffect(() => { - const loadDefaultIntegrator = async () => { - try { - const configResponse = await rpcClient.getMainRpcClient().getConfiguration({ - section: "integrator.defaultIntegrator" - }); - - if (configResponse?.value) { - setDefaultType(configResponse.value); - setProjectType(configResponse.value); - } - } catch (error) { - console.warn("Failed to load default integrator config, using fallback:", error); - } finally { - setIsLoading(false); - } - }; - - loadDefaultIntegrator(); - }, []); - - const gotToWelcome = () => { - if (onBack) { - onBack(); - } - }; - - // Show loading while fetching configuration - if (isLoading) { - return ( - -
- Loading... -
-
- ); - } - - return ( -
- - - - - - Create using samples - - {defaultType === "WSO2: MI" && ( - - )} - {projectType === "WSO2: BI" &&

Coming Soon!

} - {projectType === "WSO2: MI" && } -
-
- ); -} diff --git a/workspaces/wi/wi-webviews/src/views/samplesView/miSamples/index.tsx b/workspaces/wi/wi-webviews/src/views/samplesView/miSamples/index.tsx deleted file mode 100644 index b983b51ecd4..00000000000 --- a/workspaces/wi/wi-webviews/src/views/samplesView/miSamples/index.tsx +++ /dev/null @@ -1,177 +0,0 @@ -/** - * Copyright (c) 2025, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. - * - * WSO2 LLC. licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - - -import React, { useEffect } from "react"; -import { ComponentCard, Dropdown, SearchBox } from "@wso2/ui-toolkit"; -import { Button } from "@wso2/ui-toolkit"; -import styled from "@emotion/styled"; -import { VSCodeProgressRing } from "@vscode/webview-ui-toolkit/react"; -import { useVisualizerContext } from "../../../contexts/RpcContext"; -import { View, ViewContent, ViewHeader } from "../../../components/View"; -import { GettingStartedCategory, GettingStartedSample, SampleDownloadRequest } from "@wso2/wi-core"; - - -const SampleContainer = styled.div` - display: grid; - justify-items: center; - padding: 16px; - align-items: center; - height: 90%; -`; - -const LoaderWrapper = styled.div` - display: flex; - justify-content: center; - align-items: center; - height: 30vh; - width: 100vw; -`; - -const ProgressRing = styled(VSCodeProgressRing)` - height: 40px; - width: 40px; - margin-top: auto; - padding: 4px; -`; - -const SampleGrid = styled.div` -display: flex; -flex-wrap: wrap; -gap: 20px; -justify-content: center; -`; - -export function MiSamplesView() { - const { rpcClient } = useVisualizerContext(); - const [filteredSampleData, setFilteredSamples] = React.useState(null); - const [filteredSampleDataCopy, setFilteredSampleDataCopy] = React.useState(null); - const [SampleData, setSampleData] = React.useState(null); - const [categories, setCategories] = React.useState(null); - const [images, setImages] = React.useState([]); - const [searchText, setSearch] = React.useState(""); - const [filterText, setFilterText] = React.useState(""); - - useEffect(() => { - rpcClient.getMainRpcClient().fetchSamplesFromGithub().then((samples) => { - setSampleData(samples.samples); - setFilteredSamples(samples.samples); - setFilteredSampleDataCopy(samples.samples); - samples.categories.unshift({ id: 0, title: "All", icon: "" }); - setCategories(samples.categories); - let urls = []; - for (let i = 0; i < samples.categories.length; i++) { - urls.push(process.env.MI_SAMPLE_ICONS_GITHUB_URL + samples.categories[i].icon); - } - setImages(urls); - }); - }, []); - - const handleChange = (value: string) => { - if (value === "All") { - setFilteredSamples(SampleData); - setFilteredSampleDataCopy(SampleData); - setFilterText(value); - } else { - let categoryId = categories.find(category => category.title === value).id; - let filteredData = SampleData.filter(sample => sample.category === categoryId); - setFilteredSamples(filteredData); - setFilteredSampleDataCopy(filteredData); - setFilterText(value); - } - } - - const handleSearch = (searchText: string) => { - console.log("searchText", searchText); - setSearch(searchText); - if (searchText !== "") { - let filteredData = filteredSampleDataCopy.filter(sample => sample.title.toLowerCase().includes(searchText.toLowerCase())); - setFilteredSamples(filteredData); - } else { - setFilteredSamples(filteredSampleDataCopy); - } - } - - function downloadSample(sampleName: string) { - let request: SampleDownloadRequest = { - zipFileName: sampleName - } - rpcClient.getMainRpcClient().downloadSelectedSampleFromGithub(request); - } - - function getSampleTitle() { - return ( -
-

Samples

-

Choose a sample from the list below to get started.

-
- ); - } - - return ( - <> - - -

Category

- ({ - key: category.id - 1, - text: category.title, - value: category.title - })) : null} - onValueChange={handleChange} - value={filterText} - sx={{ width: 230 }} - /> - -
- - {filteredSampleData ? ( - - {filteredSampleData.sort((a, b) => a.priority - b.priority).map((sample, index) => ( - - -

{sample.title}

- -

{sample.description}

- {sample.isAvailable ? - - : - } -
-
- ))} -
- ) : ( - - - - )} -
-
- - ); -} diff --git a/workspaces/wi/wi-webviews/tsconfig.json b/workspaces/wi/wi-webviews/tsconfig.json deleted file mode 100644 index 1b3ad20e7f1..00000000000 --- a/workspaces/wi/wi-webviews/tsconfig.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "compilerOptions": { - - "target": "ESNext", - "useDefineForClassFields": true, - "lib": ["ESNext", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - "outDir": "./lib", - "rootDir": "./src", - - - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "sourceMap": true, - "jsx": "react-jsx", - "declaration": true, - "declarationDir": "./lib", - "esModuleInterop": true, - - "strict": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noFallthroughCasesInSwitch": true, - "allowJs": false, - "allowSyntheticDefaultImports": true, - "forceConsistentCasingInFileNames": true, - "strictNullChecks": false, - "preserveSymlinks": true, - "noImplicitReturns": false, - "noImplicitAny": true, - "typeRoots": [ - "node_modules/@types" - ], - "paths": { - "react": ["./node_modules/@types/react"] - } - }, - "include": ["src"], - "exclude": [ - "node_modules", - "build" - ] -} \ No newline at end of file diff --git a/workspaces/wi/wi-webviews/webpack.config.js b/workspaces/wi/wi-webviews/webpack.config.js deleted file mode 100644 index 57dee0ba8e6..00000000000 --- a/workspaces/wi/wi-webviews/webpack.config.js +++ /dev/null @@ -1,78 +0,0 @@ -const path = require("path"); -const webpack = require("webpack"); -const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); - -module.exports = { - entry: "./src/index.tsx", - target: "web", - devtool: !process.env.CI ? "inline-source-map" : undefined, - mode: !process.env.CI ? "development" : "production", - output: { - path: path.resolve(__dirname, "lib"), - filename: "main.js", - library: "wiWebview", - publicPath: "http://localhost:3000/lib/", - }, - resolve: { - extensions: [".js", ".jsx", ".json", ".ts", ".tsx"], - alias: { - 'react': path.resolve(__dirname, 'node_modules/react'), - 'react-dom': path.resolve(__dirname, 'node_modules/react-dom') - }, - fallback: { 'process/browser': require.resolve('process/browser'), } - }, - module: { - rules: [ - { - test: /\.(ts|tsx)$/, - loader: "ts-loader", - exclude: '/node_modules/', - }, - { - test: /\.css$/, - use: [ - 'style-loader', - 'css-loader' - ] - }, - { - test: /\.s[ac]ss$/i, - use: ["style-loader", "css-loader", "sass-loader"], - }, - { - test: /\.(woff|woff2|ttf|eot)$/, - type: 'asset/inline', - }, - { - test: /\.(svg|png)$/, - type: 'asset/resource', - generator: { - filename: './images/[name][ext]', - }, - } - ], - noParse: [require.resolve("@ts-morph/common/dist/typescript.js")], - }, - devServer: { - allowedHosts: 'all', - port: 3000, - headers: { - 'Access-Control-Allow-Origin': '*', - }, - devMiddleware: { - writeToDisk: true, - mimeTypes: { 'text/css': ['css'] }, - }, - hot: true, - compress: false, - }, - plugins: [ - new webpack.ProvidePlugin({ - process: "process/browser", - }), - new webpack.DefinePlugin({ - 'process.env.MI_SAMPLE_ICONS_GITHUB_URL': JSON.stringify('https://mi-connectors.wso2.com/samples/icons/') - }), - new ReactRefreshWebpackPlugin(), - ], -}; \ No newline at end of file From 21022694c1f1073c2791b8ebe37639fc50a727d4 Mon Sep 17 00:00:00 2001 From: gigara Date: Thu, 20 Nov 2025 00:02:59 +0530 Subject: [PATCH 52/55] Remove WSO2 Integrator Extension configuration and related watch task from launch and tasks files --- .vscode/launch.json | 27 --------------------------- .vscode/tasks.json | 16 ---------------- 2 files changed, 43 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 8962d69d80e..0893a35dbb3 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -235,33 +235,6 @@ ], "preLaunchTask": "watch-mi-tests" }, - { - "name": "WSO2 Integrator Extension", - "type": "extensionHost", - "request": "launch", - "env": { - "WEB_VIEW_DEV_MODE": "true", - "WEB_VIEW_DEV_HOST": "http://localhost:3000", - }, - "trace":true, - "debugWebviews": true, - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}/workspaces/wi/wi-extension" - ], - "outFiles": [ - "${workspaceFolder}/workspaces/wi/wi-extension/dist/**/*.js", - "${workspaceFolder}/workspaces/wi/wi-webviews/lib/**/*" - ], - "skipFiles": [ - "**/node_modules/**" - ], - "rendererDebugOptions": { - "sourceMaps": true, - "webRoot": "${workspaceFolder}/workspaces/wi/wi-webviews", - }, - "preLaunchTask": "npm: watch-wi", - "envFile": "${workspaceFolder}/workspaces/wi/wi-extension/.env" - }, { "name": "Ballerina Extension AI Tests", "type": "extensionHost", diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 5df74d9b8b8..b9523f5c3a6 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -218,22 +218,6 @@ "type": "npm", "script": "watch", "path": "workspaces/mi/mi-extension", - "problemMatcher": "$tsc-watch", - "isBackground": true, - "presentation": { - "reveal": "never", - "group": "watchers" - }, - "group": { - "kind": "build", - "isDefault": true - } - }, - { - "label": "npm: watch-wi", - "type": "npm", - "script": "watch", - "path": "workspaces/wi/wi-extension", "problemMatcher": "$tsc-watch", "isBackground": true, "presentation": { From 80b7526654f805ce516062cc1915045d0085bde5 Mon Sep 17 00:00:00 2001 From: gigara Date: Thu, 20 Nov 2025 02:36:08 +0530 Subject: [PATCH 53/55] Add WI_PROJECT_EXPLORER_VIEW_REFRESH_COMMAND to constants and update command registration --- workspaces/bi/bi-extension/src/constants/index.ts | 1 + .../bi/bi-extension/src/project-explorer/activate.ts | 4 ++-- workspaces/mi/mi-extension/src/constants/index.ts | 1 + .../mi/mi-extension/src/project-explorer/activate.ts | 8 ++++---- workspaces/mi/mi-extension/src/stateMachine.ts | 5 +++-- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/workspaces/bi/bi-extension/src/constants/index.ts b/workspaces/bi/bi-extension/src/constants/index.ts index 469aa924ce5..e3a9354dcea 100644 --- a/workspaces/bi/bi-extension/src/constants/index.ts +++ b/workspaces/bi/bi-extension/src/constants/index.ts @@ -21,4 +21,5 @@ import { BI_COMMANDS } from "@wso2/ballerina-core"; // ADD ALL THE NON-SHARED BI ONLY ATTRIBUTES HERE. export const WI_EXTENSION_ID = 'wso2.wso2-integrator'; export const WI_PROJECT_EXPLORER_VIEW_ID = 'wso2-integrator.explorer'; +export const WI_PROJECT_EXPLORER_VIEW_REFRESH_COMMAND = 'wso2-integrator.explorer.refresh'; export const BI_PROJECT_EXPLORER_VIEW_ID = BI_COMMANDS.PROJECT_EXPLORER; diff --git a/workspaces/bi/bi-extension/src/project-explorer/activate.ts b/workspaces/bi/bi-extension/src/project-explorer/activate.ts index f0d101dfdb9..790ccf4ab4d 100644 --- a/workspaces/bi/bi-extension/src/project-explorer/activate.ts +++ b/workspaces/bi/bi-extension/src/project-explorer/activate.ts @@ -20,7 +20,7 @@ import { SHARED_COMMANDS, BI_COMMANDS } from '@wso2/ballerina-core'; import { ProjectExplorerEntry, ProjectExplorerEntryProvider } from './project-explorer-provider'; import { ExtensionContext, TreeView, commands, window, workspace } from 'vscode'; import { extension } from '../biExtentionContext'; -import { BI_PROJECT_EXPLORER_VIEW_ID, WI_PROJECT_EXPLORER_VIEW_ID } from '../constants'; +import { BI_PROJECT_EXPLORER_VIEW_ID, WI_PROJECT_EXPLORER_VIEW_ID, WI_PROJECT_EXPLORER_VIEW_REFRESH_COMMAND } from '../constants'; interface ExplorerActivationConfig { context: ExtensionContext; @@ -71,7 +71,7 @@ function registerBallerinaCommands( isBallerinaWorkspace?: boolean, isEmptyWorkspace?: boolean ) { - commands.registerCommand(BI_COMMANDS.REFRESH_COMMAND, () => dataProvider.refresh()); + commands.registerCommand(isInWI ? WI_PROJECT_EXPLORER_VIEW_REFRESH_COMMAND : BI_COMMANDS.REFRESH_COMMAND, () => dataProvider.refresh()); commands.executeCommand('setContext', 'BI.isWorkspaceSupported', extension.isWorkspaceSupported ?? false); if (isBallerinaWorkspace) { diff --git a/workspaces/mi/mi-extension/src/constants/index.ts b/workspaces/mi/mi-extension/src/constants/index.ts index 0372730b149..32118a05e28 100644 --- a/workspaces/mi/mi-extension/src/constants/index.ts +++ b/workspaces/mi/mi-extension/src/constants/index.ts @@ -206,4 +206,5 @@ export const ERROR_MESSAGES = { export const WI_EXTENSION_ID = 'wso2.wso2-integrator'; export const WI_PROJECT_EXPLORER_VIEW_ID = 'wso2-integrator.explorer'; +export const WI_PROJECT_EXPLORER_VIEW_REFRESH_COMMAND = 'wso2-integrator.explorer.refresh'; export const MI_PROJECT_EXPLORER_VIEW_ID = 'MI.project-explorer'; diff --git a/workspaces/mi/mi-extension/src/project-explorer/activate.ts b/workspaces/mi/mi-extension/src/project-explorer/activate.ts index 3c5f6468b1b..b07795cf1f3 100644 --- a/workspaces/mi/mi-extension/src/project-explorer/activate.ts +++ b/workspaces/mi/mi-extension/src/project-explorer/activate.ts @@ -20,7 +20,7 @@ import * as vscode from 'vscode'; import { ProjectExplorerEntry, ProjectExplorerEntryProvider } from './project-explorer-provider'; import { getStateMachine, openView, refreshUI } from '../stateMachine'; import { EVENT_TYPE, MACHINE_VIEW, VisualizerLocation } from '@wso2/mi-core'; -import { COMMANDS } from '../constants'; +import { COMMANDS, WI_PROJECT_EXPLORER_VIEW_REFRESH_COMMAND } from '../constants'; import { ExtensionContext, TreeItem, Uri, ViewColumn, commands, window, workspace } from 'vscode'; import path = require("path"); import { deleteRegistryResource, deleteDataMapperResources, deleteSchemaResources } from '../util/fileOperations'; @@ -37,7 +37,7 @@ import { webviews } from '../visualizer/webview'; import { MILanguageClient } from '../lang-client/activator'; let isProjectExplorerInitialized = false; -export async function activateProjectExplorer(treeviewId: string, context: ExtensionContext, lsClient: ExtendedLanguageClient) { +export async function activateProjectExplorer(treeviewId: string, context: ExtensionContext, lsClient: ExtendedLanguageClient, isInWI: boolean) { if (isProjectExplorerInitialized) { return; } @@ -52,7 +52,7 @@ export async function activateProjectExplorer(treeviewId: string, context: Exten const runtimeVersion = projectDetailsRes.primaryDetails.runtimeVersion.value; const isRegistrySupported = compareVersions(runtimeVersion, RUNTIME_VERSION_440) < 0; - commands.registerCommand(COMMANDS.REFRESH_COMMAND, () => { return projectExplorerDataProvider.refresh(); }); + commands.registerCommand(isInWI ? WI_PROJECT_EXPLORER_VIEW_REFRESH_COMMAND : COMMANDS.REFRESH_COMMAND, () => { return projectExplorerDataProvider.refresh(); }); commands.registerCommand(COMMANDS.ADD_ARTIFACT_COMMAND, (entry: ProjectExplorerEntry) => { openView(EVENT_TYPE.OPEN_VIEW, { view: MACHINE_VIEW.ADD_ARTIFACT, projectUri: entry.info?.path }); @@ -634,7 +634,7 @@ export async function activateProjectExplorer(treeviewId: string, context: Exten if (projectUri) { const currentLocation = getStateMachine(projectUri).context(); if (currentLocation.documentUri === file) { - openView(EVENT_TYPE.REPLACE_VIEW, { view: MACHINE_VIEW.Overview, projectUri }); + openView(EVENT_TYPE.REPLACE_VIEW, { view: MACHINE_VIEW.Overview, projectUri }); } else if (currentLocation?.view === MACHINE_VIEW.Overview) { refreshUI(projectUri); } diff --git a/workspaces/mi/mi-extension/src/stateMachine.ts b/workspaces/mi/mi-extension/src/stateMachine.ts index 82f2a60f763..1b8b46c8a7c 100644 --- a/workspaces/mi/mi-extension/src/stateMachine.ts +++ b/workspaces/mi/mi-extension/src/stateMachine.ts @@ -21,7 +21,7 @@ import { history } from './history/activator'; import { COMMANDS, MI_PROJECT_EXPLORER_VIEW_ID, WI_EXTENSION_ID, WI_PROJECT_EXPLORER_VIEW_ID } from './constants'; import { activateProjectExplorer } from './project-explorer/activate'; import { MockService, STNode, UnitTest, Task, InboundEndpoint } from '../../syntax-tree/lib/src'; -import { logDebug } from './util/logger'; +import { log, logDebug } from './util/logger'; import { deriveConfigName, getSources } from './util/dataMapper'; import { fileURLToPath } from 'url'; import path = require('path'); @@ -656,7 +656,7 @@ const stateMachine = createMachine({ return new Promise(async (resolve, reject) => { const ls = await MILanguageClient.getInstance(context.projectUri!); const treeviewId = context.isInWI ? WI_PROJECT_EXPLORER_VIEW_ID : MI_PROJECT_EXPLORER_VIEW_ID; - await activateProjectExplorer(treeviewId, extension.context, ls.languageClient!); + await activateProjectExplorer(treeviewId, extension.context, ls.languageClient!, context.isInWI); await activateTestExplorer(extension.context); resolve(true); }); @@ -695,6 +695,7 @@ export const getStateMachine = (projectUri: string, context?: VisualizerLocation if (!workspaces) { console.warn('No workspace folder is open.'); } + log(vscode.extensions.all.map(ext => ext.id).join(', ')); stateService = interpret(stateMachine.withContext({ projectUri: projectUri, langClient: null, From 70dad0c9ff08259a7880123490f87f5ab8697e94 Mon Sep 17 00:00:00 2001 From: gigara Date: Thu, 20 Nov 2025 12:41:43 +0530 Subject: [PATCH 54/55] Fix mock services pane visibility condition --- workspaces/mi/mi-extension/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workspaces/mi/mi-extension/package.json b/workspaces/mi/mi-extension/package.json index 273aebc4f89..1abdbcdaacc 100644 --- a/workspaces/mi/mi-extension/package.json +++ b/workspaces/mi/mi-extension/package.json @@ -199,7 +199,7 @@ { "id": "MI.mock-services", "name": "Mock Services", - "when": "!config.integrator.defaultIntegrator" + "when": "MI.status == 'projectLoaded'" } ] }, From e13cf7c14a3ce1597c016df85c71d1459c2790a9 Mon Sep 17 00:00:00 2001 From: gigara Date: Thu, 20 Nov 2025 23:20:03 +0530 Subject: [PATCH 55/55] Enhance command visibility conditions for Ballerina and Micro Integrator extensions --- workspaces/ballerina/ballerina-extension/package.json | 5 +++-- workspaces/mi/mi-extension/package.json | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/workspaces/ballerina/ballerina-extension/package.json b/workspaces/ballerina/ballerina-extension/package.json index ff362535f8b..bdd6de5fb68 100644 --- a/workspaces/ballerina/ballerina-extension/package.json +++ b/workspaces/ballerina/ballerina-extension/package.json @@ -771,7 +771,8 @@ }, { "view": "testing", - "contents": "[Add Unit Test](command:BI.test.add.function)" + "contents": "[Add Unit Test](command:BI.test.add.function)", + "when": "isBIProject || isBallerinaProject" } ], "viewsContainers": { @@ -815,7 +816,7 @@ }, { "command": "BI.test.add.function", - "when": "view == workbench.view.testing", + "when": "(isBIProject || isBallerinaProject) && view == workbench.view.testing", "group": "navigation" }, { diff --git a/workspaces/mi/mi-extension/package.json b/workspaces/mi/mi-extension/package.json index 1abdbcdaacc..a1cd3f5bca9 100644 --- a/workspaces/mi/mi-extension/package.json +++ b/workspaces/mi/mi-extension/package.json @@ -933,7 +933,7 @@ { "command": "MI.test.add.case", "group": "inline", - "when": "testId in test.suites" + "when": "MI.status == 'projectLoaded' && testId in test.suites" }, { "command": "MI.test.edit.case",