This is an automated email from the ASF dual-hosted git repository.
yamer pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-tools.git
The following commit(s) were added to refs/heads/main by this push:
new 52040d70254 kie-issues#1694: Apache KIE Extended Services extension
issues (#2802)
52040d70254 is described below
commit 52040d702548670c18c72db89a02057da7aa5622
Author: Yeser Amer <[email protected]>
AuthorDate: Thu Jan 16 11:25:10 2025 +0100
kie-issues#1694: Apache KIE Extended Services extension issues (#2802)
Co-authored-by: Luiz João Motta <[email protected]>
Co-authored-by: Jozef Marko <[email protected]>
---
packages/cors-proxy/package.json | 2 +-
.../env/index.js | 4 +-
.../package.json | 11 +-
.../src/Connection.ts | 5 +-
.../src/LocalExtendedServices.ts | 1 +
.../src/Validator.ts | 14 +--
.../src/configurations/Configuration.ts | 86 +++++----------
.../src/configurations/ConfigurationWatcher.ts | 6 +-
.../src/extension/extension-browser.ts | 102 +++++++++++-------
.../src/extension/extension-main.ts | 118 ++++++++++++++-------
.../src/requests/PingRequest.ts | 5 +-
.../src/requests/ValidationRequests.ts | 39 ++++---
.../webpack.config.js | 62 ++++++++---
packages/kie-sandbox-distribution/package.json | 2 +-
pnpm-lock.yaml | 18 ++--
15 files changed, 275 insertions(+), 200 deletions(-)
diff --git a/packages/cors-proxy/package.json b/packages/cors-proxy/package.json
index 2ac6327c043..dd2be835947 100644
--- a/packages/cors-proxy/package.json
+++ b/packages/cors-proxy/package.json
@@ -28,7 +28,7 @@
"dependencies": {
"cors": "^2.8.5",
"express": "^4.21.1",
- "node-fetch": "^3.3.1"
+ "node-fetch": "^3.3.2"
},
"devDependencies": {
"@babel/core": "^7.16.0",
diff --git a/packages/extended-services-vscode-extension/env/index.js
b/packages/extended-services-vscode-extension/env/index.js
index 61bc742bd66..bbd362e8067 100644
--- a/packages/extended-services-vscode-extension/env/index.js
+++ b/packages/extended-services-vscode-extension/env/index.js
@@ -17,9 +17,9 @@
* under the License.
*/
-const { varsWithName, composeEnv } = require("@kie-tools-scripts/build-env");
+const { composeEnv, varsWithName } = require("@kie-tools-scripts/build-env");
-module.exports = composeEnv([require("@kie-tools/root-env/env")], {
+module.exports = composeEnv([require("@kie-tools/root-env/env"),
require("@kie-tools/extended-services-java/env")], {
vars: varsWithName({}),
get env() {
return {};
diff --git a/packages/extended-services-vscode-extension/package.json
b/packages/extended-services-vscode-extension/package.json
index aa30fd2348b..12844201161 100644
--- a/packages/extended-services-vscode-extension/package.json
+++ b/packages/extended-services-vscode-extension/package.json
@@ -43,7 +43,7 @@
"@vscode/test-web": "^0.0.30",
"@vscode/vsce": "^3.2.1",
"copy-webpack-plugin": "^11.0.0",
- "node-fetch": "^3.3.1",
+ "node-fetch": "^3.3.2",
"rimraf": "^3.0.2",
"webpack": "^5.94.0",
"webpack-cli": "^4.10.0",
@@ -73,22 +73,23 @@
],
"configuration": {
"properties": {
- "extendedServices.connectionHeartbeatIntervalinSecs": {
- "default": 1,
+ "extendedServices.connectionHeartbeatIntervalInSecs": {
+ "default": 10,
"description": "Specifies the interval (in seconds) between each
connection check.",
"format": "time",
+ "minimum": 10,
"order": 2,
"type": "integer"
},
"extendedServices.enableAutorun": {
"default": true,
- "description": "Automatically run a local instance of the service.",
+ "description": "Automatically runs a local instance of the Extended
Service.",
"order": 0,
"type": "boolean"
},
"extendedServices.extendedServicesURL": {
"default": "http://localhost:21345",
- "description": "Specifies the Exnteded Services URL.",
+ "description": "Specifies the Extended Services URL.",
"format": "uri",
"order": 1,
"type": "string"
diff --git a/packages/extended-services-vscode-extension/src/Connection.ts
b/packages/extended-services-vscode-extension/src/Connection.ts
index 0984a04f05c..185ffdfa696 100644
--- a/packages/extended-services-vscode-extension/src/Connection.ts
+++ b/packages/extended-services-vscode-extension/src/Connection.ts
@@ -28,13 +28,14 @@ export class Connection {
private timeout: NodeJS.Timeout | null = null;
private connected: boolean = false;
- public async start(extendedServicesURL: URL,
connectionHeartbeatIntervalinSecs: number): Promise<void> {
+ public async start(extendedServicesURL: URL,
connectionHeartbeatIntervalInSecs: number): Promise<void> {
this.timeout = setInterval(async () => {
this.performHeartbeatCheck(extendedServicesURL);
- }, connectionHeartbeatIntervalinSecs * 1000);
+ }, connectionHeartbeatIntervalInSecs * 1000);
}
public stop(): void {
+ console.debug("[Extended Services Extension] Disconnecting from Extended
Service");
if (this.timeout) {
this.fireDisconnectedEvent();
clearInterval(this.timeout);
diff --git
a/packages/extended-services-vscode-extension/src/LocalExtendedServices.ts
b/packages/extended-services-vscode-extension/src/LocalExtendedServices.ts
index 090e3404ef4..e804db505c2 100644
--- a/packages/extended-services-vscode-extension/src/LocalExtendedServices.ts
+++ b/packages/extended-services-vscode-extension/src/LocalExtendedServices.ts
@@ -80,6 +80,7 @@ export class LocalExtendedServices {
}
public stop(): void {
+ console.debug("[Extended Services Extension] Stopping local instance of
Extended Service");
if (!this.serviceProcess) {
return;
}
diff --git a/packages/extended-services-vscode-extension/src/Validator.ts
b/packages/extended-services-vscode-extension/src/Validator.ts
index 40f8cf1e055..c69c185e0e2 100644
--- a/packages/extended-services-vscode-extension/src/Validator.ts
+++ b/packages/extended-services-vscode-extension/src/Validator.ts
@@ -49,26 +49,28 @@ function createDMNDiagnostics(validationResponses:
validationResponse.DMNValidat
});
}
-export async function validateBPMN(serviceURL: URL, kieFile: kieFile.KieFile):
Promise<vscode.Diagnostic[]> {
+export async function validateBPMN(serviceURL: URL, bpmnFile:
kieFile.KieFile): Promise<vscode.Diagnostic[]> {
try {
const validationResponses: validationResponse.BPMNValidationResponse[] =
await validationRequests.validateBPMN(
serviceURL,
- kieFile
+ bpmnFile
);
return createBPMNDiagnostics(validationResponses);
} catch (error) {
- throw new Error("VALIDATE BPMN ERROR - " + error.message);
+ console.error(`An error occured while trying to validate BPMN file:
${bpmnFile} with error: ${error.message}`);
+ throw new Error(`An error occured while trying to validate BPMN file:
${bpmnFile} with error: ${error.message}`);
}
}
-export async function validateDMN(serviceURL: URL, kieFile: kieFile.KieFile):
Promise<vscode.Diagnostic[]> {
+export async function validateDMN(serviceURL: URL, dmnFile: kieFile.KieFile):
Promise<vscode.Diagnostic[]> {
try {
const validationResponses: validationResponse.DMNValidationResponse[] =
await validationRequests.validateDMN(
serviceURL,
- kieFile
+ dmnFile
);
return createDMNDiagnostics(validationResponses);
} catch (error) {
- throw new Error("VALIDATE DMN ERROR - " + error.message);
+ console.error(`An error occured while trying to validate DMN file:
${dmnFile} with error: ${error.message}`);
+ throw new Error(`An error occured while trying to validate DMN file:
${dmnFile} with error: ${error.message}`);
}
}
diff --git
a/packages/extended-services-vscode-extension/src/configurations/Configuration.ts
b/packages/extended-services-vscode-extension/src/configurations/Configuration.ts
index 2b322895afa..39a21ffa7c9 100644
---
a/packages/extended-services-vscode-extension/src/configurations/Configuration.ts
+++
b/packages/extended-services-vscode-extension/src/configurations/Configuration.ts
@@ -19,81 +19,53 @@
import * as vscode from "vscode";
-export const enableAutoRunID: string = "extendedServices.enableAutorun";
-export const connectionHeartbeatIntervalinSecsID: string =
"extendedServices.connectionHeartbeatIntervalinSecs";
-export const extendedServicesURLID: string =
"extendedServices.extendedServicesURL";
+export const enableAutoRunID = "extendedServices.enableAutorun";
+export const connectionHeartbeatIntervalInSecsID =
"extendedServices.connectionHeartbeatIntervalInSecs";
+export const extendedServicesURLID = "extendedServices.extendedServicesURL";
+
+type ConfigurationProperty = string | number | boolean;
export class Configuration {
readonly enableAutoRun: boolean;
- readonly connectionHeartbeatIntervalinSecs: number;
+ readonly connectionHeartbeatIntervalInSecs: number;
readonly extendedServicesURL: URL;
- constructor(enableAutoRun: boolean, connectionHeartbeatIntervalinSecs:
number, extendedServicesURL: URL) {
+ constructor(enableAutoRun: boolean, connectionHeartbeatIntervalInSecs:
number, extendedServicesURL: URL) {
this.enableAutoRun = enableAutoRun;
- this.connectionHeartbeatIntervalinSecs = connectionHeartbeatIntervalinSecs;
+ this.connectionHeartbeatIntervalInSecs = connectionHeartbeatIntervalInSecs;
this.extendedServicesURL = extendedServicesURL;
}
}
-function fetchEnableAutoRun(): boolean {
- const enableAutoRun =
vscode.workspace.getConfiguration().get<boolean>(enableAutoRunID);
- if (!enableAutoRun) {
- throw new Error("Enable Auto Run configuration not found");
- }
- return enableAutoRun;
-}
-
-function fetchConnectionHeartbeatIntervalinSecs(): number {
- const connectionHeartbeatIntervalinSecs = vscode.workspace
- .getConfiguration()
- .get<number>(connectionHeartbeatIntervalinSecsID);
- if (!connectionHeartbeatIntervalinSecs) {
- throw new Error("Connection Heartbeat Interval configuration not found");
- }
-
- return connectionHeartbeatIntervalinSecs;
-}
-
function fetchExtendedServicesURL(): URL {
- const extendedServicesURL =
vscode.workspace.getConfiguration().get<string>(extendedServicesURLID);
- if (!extendedServicesURL) {
- throw new Error("URL configuration not found");
- }
-
+ const defaultExtendedServicesURL =
`http://${process.env.WEBPACK_REPLACE__extendedServicesUrlHost}:${process.env.WEBPACK_REPLACE__extendedServicesUrlPort}`;
+ const extendedServicesURL =
getConfigurationPropertyValue<string>(extendedServicesURLID,
defaultExtendedServicesURL);
try {
return new URL(extendedServicesURL);
} catch (error) {
- throw new Error("Invalid service URL:" + error.message);
+ throw new Error(`URL configuration ${extendedServicesURL} is invalid:
${error.message}`);
}
}
-export function fetchConfiguration(): Configuration {
- let errorMessages: string[] = [];
- let enableAutoRun: any;
- let connectionHeartbeatIntervalinSecs: any;
- let extendedServicesURL: any;
-
- try {
- enableAutoRun = fetchEnableAutoRun();
- } catch (error) {
- errorMessages.push(error.message);
- }
-
- try {
- connectionHeartbeatIntervalinSecs =
fetchConnectionHeartbeatIntervalinSecs();
- } catch (error) {
- errorMessages.push(error.message);
+const getConfigurationPropertyValue = <T extends ConfigurationProperty | null>(
+ property: string,
+ defaultValue: T
+): T => {
+ let value = vscode.workspace.getConfiguration().get(property) as T;
+ if (value === null) {
+ console.warn(`Property: ${property} is missing, using the default:
${defaultValue}`);
+ value = defaultValue;
}
+ return value;
+};
- try {
- extendedServicesURL = fetchExtendedServicesURL();
- } catch (error) {
- errorMessages.push(error.message);
- }
+export function fetchConfiguration(): Configuration {
+ const enableAutoRun =
getConfigurationPropertyValue<boolean>(enableAutoRunID, true);
+ const connectionHeartbeatIntervalInSecs =
getConfigurationPropertyValue<number>(
+ connectionHeartbeatIntervalInSecsID,
+ 10
+ );
+ const extendedServicesURL = fetchExtendedServicesURL();
- if (errorMessages.length < 0) {
- throw new Error("CONFIGURATION ERROR - " + errorMessages.join(", "));
- } else {
- return new Configuration(enableAutoRun, connectionHeartbeatIntervalinSecs,
extendedServicesURL);
- }
+ return new Configuration(enableAutoRun, connectionHeartbeatIntervalInSecs,
extendedServicesURL);
}
diff --git
a/packages/extended-services-vscode-extension/src/configurations/ConfigurationWatcher.ts
b/packages/extended-services-vscode-extension/src/configurations/ConfigurationWatcher.ts
index 62d6e7b4bfb..9e8a8f903bb 100644
---
a/packages/extended-services-vscode-extension/src/configurations/ConfigurationWatcher.ts
+++
b/packages/extended-services-vscode-extension/src/configurations/ConfigurationWatcher.ts
@@ -30,12 +30,12 @@ export class ConfigurationWatcher {
private handleConfigurationChange(configurationChange:
vscode.ConfigurationChangeEvent) {
const enableAutoRunChanged =
configurationChange.affectsConfiguration(configuration.enableAutoRunID);
- const connectionHeartbeatIntervalinSecsChanged =
configurationChange.affectsConfiguration(
- configuration.connectionHeartbeatIntervalinSecsID
+ const connectionHeartbeatIntervalInSecsChanged =
configurationChange.affectsConfiguration(
+ configuration.connectionHeartbeatIntervalInSecsID
);
const extendedServicesURLChanged =
configurationChange.affectsConfiguration(configuration.extendedServicesURLID);
- if (enableAutoRunChanged || connectionHeartbeatIntervalinSecsChanged ||
extendedServicesURLChanged) {
+ if (enableAutoRunChanged || connectionHeartbeatIntervalInSecsChanged ||
extendedServicesURLChanged) {
this.fireConfigurationChangedEvent();
}
}
diff --git
a/packages/extended-services-vscode-extension/src/extension/extension-browser.ts
b/packages/extended-services-vscode-extension/src/extension/extension-browser.ts
index 955d7967426..b38202b6238 100644
---
a/packages/extended-services-vscode-extension/src/extension/extension-browser.ts
+++
b/packages/extended-services-vscode-extension/src/extension/extension-browser.ts
@@ -40,16 +40,19 @@ let kieFilesWatcher: KieFilesWatcher;
let configurationWatcher: ConfigurationWatcher;
let connection: Connection;
-let userDisconnected: boolean = false;
+/* Determines if the extension is connected with the Extended Services Backend
*/
+let isConnected = false;
+/* Determines the user explicitely disconnected the Extension from the
Extended Services Backend */
+let disconnectedByUser: boolean = false;
let configuration: Configuration | null = null;
function initializeCommands(context: vscode.ExtensionContext) {
connectExtendedServicesCommand =
vscode.commands.registerCommand(startExtendedServicesCommandUID, () => {
- userDisconnected = false;
+ disconnectedByUser = false;
startExtendedServices();
});
disconnectExtendedServicesCommand =
vscode.commands.registerCommand(stopExtendedServicesCommandUID, () => {
- userDisconnected = true;
+ disconnectedByUser = true;
stopExtendedServices();
});
}
@@ -67,29 +70,40 @@ function initializeVSCodeElements() {
}
function startExtendedServices(): void {
+ console.debug("[Extended Services Extension] Starting Extended Service");
try {
- statusBarItem.show();
configuration = fetchConfiguration();
} catch (error) {
- stopExtendedServices();
- vscode.window.showErrorMessage("An error happened while trying to start
the Extended Services: " + error.message);
+ console.error(`[Extended Services Extension] Extension configuration is
wrong: ${error.message}`);
+ vscode.window.showErrorMessage(
+ `Extension configuration is wrong: ${error.message}. Please fix your
local extension's setting`
+ );
return;
}
try {
- connection.start(configuration.extendedServicesURL,
configuration.connectionHeartbeatIntervalinSecs);
+ console.debug(
+ `[Extended Services Extension] Connecting with the Extended Services
located: ${configuration.extendedServicesURL}`
+ );
+ connection.start(configuration.extendedServicesURL,
configuration.connectionHeartbeatIntervalInSecs);
} catch (error) {
stopExtendedServices();
- vscode.window.showErrorMessage("An error happened while trying to connect
to the service:" + error.message);
+ console.error(
+ `[Extended Services Extension] An error happened while trying to start
the local service: ${error.message}`
+ );
+ vscode.window.showErrorMessage(`An error happened while trying to start
the local service: ${error.message}`);
}
}
function stopExtendedServices() {
+ console.debug("[Extended Services Extension] Stopping Extended Service");
+ /* Invalidating immediatly the current connection, so any request coming
when shutting down is not served */
+ isConnected = false;
configuration = null;
connection.stop();
}
-async function validate(configuration: Configuration) {
+async function validate(extendedServicesURL: URL) {
diagnosticCollection.clear();
const bpmnFiles: KieFile[] = await
kiefilesfetcher.findActiveKieFiles([kiefilesfetcher.bpmnDocumentFilter]);
@@ -97,30 +111,30 @@ async function validate(configuration: Configuration) {
for (const bpmnFile of bpmnFiles) {
try {
- const bpmnDiagnostics: vscode.Diagnostic[] = await
validator.validateBPMN(
- configuration.extendedServicesURL,
- bpmnFile
- );
+ console.debug(`[Extended Services Extension] Validating BPMN file:
${bpmnFile.uri.path}`);
+ const bpmnDiagnostics: vscode.Diagnostic[] = await
validator.validateBPMN(extendedServicesURL, bpmnFile);
diagnosticCollection.set(bpmnFile.uri, bpmnDiagnostics);
} catch (error) {
- stopExtendedServices();
+ console.error(
+ `[Extended Services Extension] An error happened while trying to
validate ${bpmnFile.uri.path}: ${error.message}`
+ );
vscode.window.showErrorMessage(
- "An error happened while trying to validate " + bpmnFile.uri.path + ":
" + error.message
+ `An error happened while trying to validate ${bpmnFile.uri.path}:
${error.message}`
);
}
}
for (const dmnFile of dmnFiles) {
try {
- const bpmnDiagnostics: vscode.Diagnostic[] = await validator.validateDMN(
- configuration.extendedServicesURL,
- dmnFile
- );
- diagnosticCollection.set(dmnFile.uri, bpmnDiagnostics);
+ console.debug(`[Extended Services Extension] Validating DMN file:
${dmnFile.uri.path}`);
+ const dmnDiagnostics: vscode.Diagnostic[] = await
validator.validateDMN(extendedServicesURL, dmnFile);
+ diagnosticCollection.set(dmnFile.uri, dmnDiagnostics);
} catch (error) {
- stopExtendedServices();
+ console.error(
+ `[Extended Services Extension] An error happened while trying to
validate ${dmnFile.uri.path}: ${error.message}`
+ );
vscode.window.showErrorMessage(
- "An error happened while trying to validate " + dmnFile.uri.path + ":
" + error.message
+ `An error happened while trying to validate ${dmnFile.uri.path}:
${error.message}`
);
}
}
@@ -133,43 +147,48 @@ export function activate(context:
vscode.ExtensionContext) {
configurationWatcher.subscribeSettingsChanged(() => {
stopExtendedServices();
- if (!userDisconnected && kieFilesWatcher.watchedKieFiles.length > 0) {
+ if (!disconnectedByUser && kieFilesWatcher.watchedKieFiles.length > 0) {
startExtendedServices();
}
});
kieFilesWatcher.subscribeKieFilesOpened(() => {
- statusBarItem.show();
- if (userDisconnected) {
- return;
+ console.debug(
+ `[Extended Services Extension] A KIE file has been opened. Current
opened KIE files: ${
+ kieFilesWatcher.watchedKieFiles.length
+ }`
+ );
+ if (!disconnectedByUser && isConnected && configuration) {
+ validate(configuration.extendedServicesURL);
}
-
- if (configuration) {
- validate(configuration);
- } else {
+ if (!disconnectedByUser && !isConnected) {
startExtendedServices();
}
});
kieFilesWatcher.subscribeKieFileChanged(() => {
- if (configuration) {
- validate(configuration);
+ console.debug("[Extended Services Extension] A KIE file has been changed");
+ if (!disconnectedByUser && isConnected && configuration) {
+ validate(configuration.extendedServicesURL);
}
});
kieFilesWatcher.subscribeKieFilesClosed(() => {
- if (kieFilesWatcher.watchedKieFiles.length === 0) {
- stopExtendedServices();
- statusBarItem.hide();
- } else if (configuration) {
- validate(configuration);
+ console.debug(
+ `[Extended Services Extension] A KIE file has been closed. Current
opened KIE files: ${kieFilesWatcher.watchedKieFiles.length}`
+ );
+ if (!disconnectedByUser && isConnected && configuration) {
+ validate(configuration.extendedServicesURL);
}
});
connection.subscribeConnected(() => {
+ console.debug("[Extended Services Extension] Connected with Extended
Services");
+ isConnected = true;
vscode.commands.executeCommand("setContext", connectedEnablementUID, true);
+ statusBarItem.show();
if (configuration) {
- validate(configuration);
+ validate(configuration.extendedServicesURL);
statusBarItem.text = "$(extended-services-connected)";
statusBarItem.tooltip = "Apache KIE™ Extended Services is connected.
Click to disconnect.";
statusBarItem.command = stopExtendedServicesCommandUID;
@@ -177,11 +196,16 @@ export function activate(context:
vscode.ExtensionContext) {
});
connection.subscribeConnectionLost((errorMessage: string) => {
- vscode.window.showErrorMessage("Connection error: " + errorMessage);
+ statusBarItem.hide();
stopExtendedServices();
+ isConnected = false;
+ console.error("[Extended Services Extension] Connection lost with Extended
Services");
+ vscode.window.showErrorMessage(`Connection error: ${errorMessage}`);
});
connection.subscribeDisconnected(() => {
+ console.debug("[Extended Services Extension] Disconnected with Extended
Services");
+ isConnected = false;
vscode.commands.executeCommand("setContext", connectedEnablementUID,
false);
statusBarItem.text = "$(extended-services-disconnected)";
statusBarItem.tooltip = "Apache KIE™ Extended Services is not connected.
Click to connect.";
diff --git
a/packages/extended-services-vscode-extension/src/extension/extension-main.ts
b/packages/extended-services-vscode-extension/src/extension/extension-main.ts
index 560feb974e9..d48fe9a819c 100644
---
a/packages/extended-services-vscode-extension/src/extension/extension-main.ts
+++
b/packages/extended-services-vscode-extension/src/extension/extension-main.ts
@@ -43,16 +43,19 @@ let configurationWatcher: ConfigurationWatcher;
let connection: Connection;
let localService: LocalExtendedServices;
-let userDisconnected: boolean = false;
+/* Determines if the extension is connected with the Extended Services Backend
*/
+let isConnected: boolean = false;
+/* Determines the user explicitely disconnected the Extension from the
Extended Services Backend */
+let disconnectedByUser: boolean = false;
let configuration: Configuration | null;
function initializeCommands(context: vscode.ExtensionContext) {
connectExtendedServicesCommand =
vscode.commands.registerCommand(startExtendedServicesCommandUID, () => {
- userDisconnected = false;
+ disconnectedByUser = false;
startExtendedServices(context);
});
disconnectExtendedServicesCommand =
vscode.commands.registerCommand(stopExtendedServicesCommandUID, () => {
- userDisconnected = true;
+ disconnectedByUser = true;
if (configuration) {
stopExtendedServices(configuration);
}
@@ -71,14 +74,16 @@ function initializeVSCodeElements() {
}
function startExtendedServices(context: vscode.ExtensionContext): void {
- let config: Configuration;
+ console.debug("[Extended Services Extension] Starting Extended Service");
+ statusBarItem.command = undefined;
try {
- statusBarItem.command = undefined;
- statusBarItem.show();
configuration = fetchConfiguration();
} catch (error) {
- stopExtendedServices(null);
- vscode.window.showErrorMessage("An error happened while trying to start
the Extended Services: " + error.message);
+ console.error(`[Extended Services Extension] Extension configuration is
wrong: ${error.message}`);
+ vscode.window.showErrorMessage(
+ `Extension configuration is wrong: ${error.message}. Please fix your
local extension's setting.`
+ );
+ statusBarItem.hide();
return;
}
@@ -90,6 +95,9 @@ function startExtendedServices(context:
vscode.ExtensionContext): void {
}
function stopExtendedServices(configuration: Configuration | null) {
+ console.debug("[Extended Services Extension] Stopping Extended Service");
+ /* Invalidating immediatly the current connection, so any request coming
when shutting down is not served */
+ isConnected = false;
statusBarItem.command = undefined;
if (configuration?.enableAutoRun) {
localService.stop();
@@ -99,24 +107,38 @@ function stopExtendedServices(configuration: Configuration
| null) {
}
function startLocalExtendedServices(configuration: Configuration, context:
vscode.ExtensionContext): void {
+ console.debug("[Extended Services Extension] Starting a Local Extended
Services process");
try {
localService.start(configuration.extendedServicesURL,
context.extensionPath);
} catch (error) {
stopExtendedServices(configuration);
- vscode.window.showErrorMessage("An error happened while trying to start
the local service:" + error.message);
+ console.error(
+ `[Extended Services Extension] An error happened while trying to start
the Local Extended Services process: ${error.message}`
+ );
+ vscode.window.showErrorMessage(
+ `An error happened while trying to start the Local Extended Services
process: ${error.message}`
+ );
}
}
function startConnection(configuration: Configuration) {
+ console.debug(
+ `[Extended Services Extension] Connecting with the Extended Services
located: ${configuration.extendedServicesURL}`
+ );
try {
- connection.start(configuration.extendedServicesURL,
configuration.connectionHeartbeatIntervalinSecs);
+ connection.start(configuration.extendedServicesURL,
configuration.connectionHeartbeatIntervalInSecs);
} catch (error) {
stopExtendedServices(configuration);
- vscode.window.showErrorMessage("An error happened while trying to connect
to the service:" + error.message);
+ console.error(
+ `[Extended Services Extension] An error happened while trying to connect
to the service: ${error.message}`
+ );
+ vscode.window.showErrorMessage(`An error happened while trying to connect
to the service: ${error.message}`);
}
}
-async function validate(configuration: Configuration) {
+async function validate(extendedServicesURL: URL) {
+ console.debug("[Extended Services Extension] Validating the opened KIE
files");
+
diagnosticCollection.clear();
const bpmnFiles: KieFile[] = await
kiefilesfetcher.findActiveKieFiles([kiefilesfetcher.bpmnDocumentFilter]);
@@ -124,29 +146,30 @@ async function validate(configuration: Configuration) {
for (const bpmnFile of bpmnFiles) {
try {
- const bpmnDiagnostics: vscode.Diagnostic[] = await
validator.validateBPMN(
- configuration.extendedServicesURL,
- bpmnFile
- );
+ console.debug(`[Extended Services Extension] Validating BPMN file:
${bpmnFile.uri.path}`);
+ const bpmnDiagnostics: vscode.Diagnostic[] = await
validator.validateBPMN(extendedServicesURL, bpmnFile);
diagnosticCollection.set(bpmnFile.uri, bpmnDiagnostics);
} catch (error) {
+ console.error(
+ `[Extended Services Extension] An error happened while trying to
validate ${bpmnFile.uri.path}: ${error.message}`
+ );
vscode.window.showErrorMessage(
- "An error happened while trying to validate " + bpmnFile.uri.path + ":
" + error.message
+ `An error happened while trying to validate ${bpmnFile.uri.path}:
${error.message}`
);
}
}
for (const dmnFile of dmnFiles) {
try {
- const bpmnDiagnostics: vscode.Diagnostic[] = await validator.validateDMN(
- configuration.extendedServicesURL,
- dmnFile
- );
- diagnosticCollection.set(dmnFile.uri, bpmnDiagnostics);
+ console.debug(`[Extended Services Extension] Validating DMN file:
${dmnFile.uri.path}`);
+ const dmnDiagnostics: vscode.Diagnostic[] = await
validator.validateDMN(extendedServicesURL, dmnFile);
+ diagnosticCollection.set(dmnFile.uri, dmnDiagnostics);
} catch (error) {
- stopExtendedServices(configuration);
+ console.error(
+ `[Extended Services Extension] An error happened while trying to
validate ${dmnFile.uri.path}: ${error.message}`
+ );
vscode.window.showErrorMessage(
- "An error happened while trying to validate " + dmnFile.uri.path + ":
" + error.message
+ `An error happened while trying to validate ${dmnFile.uri.path}:
${error.message}`
);
}
}
@@ -160,40 +183,43 @@ export function activate(context:
vscode.ExtensionContext) {
configurationWatcher.subscribeSettingsChanged(() => {
stopExtendedServices(configuration);
- if (!userDisconnected && kieFilesWatcher.watchedKieFiles.length > 0) {
+ if (!disconnectedByUser && kieFilesWatcher.watchedKieFiles.length > 0) {
startExtendedServices(context);
}
});
kieFilesWatcher.subscribeKieFilesOpened(() => {
- statusBarItem.show();
- if (userDisconnected) {
- return;
+ console.debug(
+ `[Extended Services Extension] A KIE file has been opened. Current
opened KIE files: ${
+ kieFilesWatcher.watchedKieFiles.length
+ }`
+ );
+ if (!disconnectedByUser && isConnected && configuration) {
+ validate(configuration.extendedServicesURL);
}
-
- if (configuration) {
- validate(configuration);
- } else {
+ if (!disconnectedByUser && !isConnected) {
startExtendedServices(context);
}
});
kieFilesWatcher.subscribeKieFileChanged(() => {
- if (configuration) {
- validate(configuration);
+ console.debug("[Extended Services Extension] A KIE file has been changed");
+ if (!disconnectedByUser && isConnected && configuration) {
+ validate(configuration.extendedServicesURL);
}
});
kieFilesWatcher.subscribeKieFilesClosed(() => {
- if (kieFilesWatcher.watchedKieFiles.length === 0) {
- stopExtendedServices(configuration);
- statusBarItem.hide();
- } else if (configuration) {
- validate(configuration);
+ console.debug(
+ `[Extended Services Extension] A KIE file has been closed. Current
opened KIE files: ${kieFilesWatcher.watchedKieFiles.length}`
+ );
+ if (!disconnectedByUser && isConnected && configuration) {
+ validate(configuration.extendedServicesURL);
}
});
localService.subscribeLocalExtendedServicesStarted(() => {
+ console.debug("[Extended Services Extension] Local instance of Extended
Services started");
if (configuration) {
startConnection(configuration);
}
@@ -209,13 +235,17 @@ export function activate(context:
vscode.ExtensionContext) {
});
localService.subscribeLocalExtendedServicesStopped(() => {
+ console.debug("[Extended Services Extension] Local instance of Extended
Services stopped");
connection.stop();
});
connection.subscribeConnected(() => {
+ console.debug("[Extended Services Extension] Connected with Extended
Services");
+ isConnected = true;
vscode.commands.executeCommand("setContext", connectedEnablementUID, true);
+ statusBarItem.show();
if (configuration) {
- validate(configuration);
+ validate(configuration.extendedServicesURL);
statusBarItem.text = "$(extended-services-connected)";
statusBarItem.tooltip = "Apache KIE™ Extended Services are connected.
Click to disconnect.";
statusBarItem.command = stopExtendedServicesCommandUID;
@@ -223,11 +253,17 @@ export function activate(context:
vscode.ExtensionContext) {
});
connection.subscribeConnectionLost((errorMessage: string) => {
+ statusBarItem.hide();
stopExtendedServices(configuration);
- vscode.window.showErrorMessage("Connection error: " + errorMessage);
+ isConnected = false;
+ diagnosticCollection.clear();
+ console.error("[Extended Services Extension] Connection lost with Extended
Services");
+ vscode.window.showErrorMessage(`Connection error: ${errorMessage}`);
});
connection.subscribeDisconnected(() => {
+ console.debug("[Extended Services Extension] Disconnected with Extended
Services");
+ isConnected = false;
vscode.commands.executeCommand("setContext", connectedEnablementUID,
false);
statusBarItem.text = "$(extended-services-disconnected)";
statusBarItem.tooltip = "Apache KIE™ Extended Services are not connected.
Click to connect.";
diff --git
a/packages/extended-services-vscode-extension/src/requests/PingRequest.ts
b/packages/extended-services-vscode-extension/src/requests/PingRequest.ts
index 0e26fd641ca..b5ba0206531 100644
--- a/packages/extended-services-vscode-extension/src/requests/PingRequest.ts
+++ b/packages/extended-services-vscode-extension/src/requests/PingRequest.ts
@@ -20,10 +20,11 @@
import * as pingresponse from "./PingResponse";
export async function ping(extendedServicesURL: URL):
Promise<pingresponse.PingResponse> {
- const url = new URL("/ping", extendedServicesURL);
+ const extendedServicesPingURL = new URL("/ping", extendedServicesURL);
try {
- const response = await fetch(url.toString());
+ console.debug("[Extended Services Extension] Pinging: " +
extendedServicesPingURL.toString());
+ const response = await fetch(extendedServicesPingURL.toString());
if (response.ok) {
const responseData = (await response.json()) as
pingresponse.PingResponse;
return responseData;
diff --git
a/packages/extended-services-vscode-extension/src/requests/ValidationRequests.ts
b/packages/extended-services-vscode-extension/src/requests/ValidationRequests.ts
index 53436866b3c..92bbb3cb76f 100644
---
a/packages/extended-services-vscode-extension/src/requests/ValidationRequests.ts
+++
b/packages/extended-services-vscode-extension/src/requests/ValidationRequests.ts
@@ -21,25 +21,23 @@ import * as vscode from "vscode";
import * as validationresponse from "./ValidationResponse";
import * as kiefile from "../kieFiles/KieFile";
-interface ValidationBody {
+interface MultipleResourcesPayload {
mainURI: string;
- resources: ValidationResource[];
+ resources: ResourceWithURI[];
}
-interface ValidationResource {
+interface ResourceWithURI {
URI: string;
content: string;
}
-function buildRequestBody(document: vscode.TextDocument): string {
- const body: ValidationBody = {
- mainURI: "VS Code KIE files",
- resources: [
- {
- URI: document.fileName,
- content: document.getText(),
- },
- ],
+function buildMultipleResourcesPayload(mainURI: string, documents:
vscode.TextDocument[]): string {
+ const body: MultipleResourcesPayload = {
+ mainURI: mainURI,
+ resources: documents.map((document) => ({
+ URI: document.fileName,
+ content: document.getText(),
+ })),
};
return JSON.stringify(body);
@@ -56,12 +54,13 @@ async function validate(
textDocument = await vscode.workspace.openTextDocument(kieFile.uri);
}
const url = new URL(endpoint, serviceURL);
+ console.debug(`[Extended Services Extension] Fetching ${url.toString()}`);
const response = await fetch(url.toString(), {
method: "POST",
headers: {
"Content-Type": "application/json",
},
- body: buildRequestBody(textDocument),
+ body: buildMultipleResourcesPayload(textDocument.fileName, [textDocument]),
});
const responseData: any = await response.json();
@@ -70,22 +69,28 @@ async function validate(
export async function validateBPMN(
serviceURL: URL,
- kieFile: kiefile.KieFile
+ bpmnFile: kiefile.KieFile
): Promise<validationresponse.BPMNValidationResponse[]> {
try {
- return validate(serviceURL, kieFile, "/jitbpmn/validate",
validationresponse.parseBPMNValidationResponse);
+ return validate(serviceURL, bpmnFile, "/jitbpmn/validate",
validationresponse.parseBPMNValidationResponse);
} catch (error) {
+ console.error(
+ `[Extended Services Extension] An error happened while trying to
validate ${bpmnFile} from serviceUrl ${serviceURL}: ${error.message}`
+ );
throw new Error("VALIDATE BPMN REQUEST ERROR: \n", error.message);
}
}
export async function validateDMN(
serviceURL: URL,
- kieFile: kiefile.KieFile
+ dmnFile: kiefile.KieFile
): Promise<validationresponse.DMNValidationResponse[]> {
try {
- return validate(serviceURL, kieFile, "/jitdmn/validate",
validationresponse.parseDMNValidationResponse);
+ return validate(serviceURL, dmnFile, "/jitdmn/validate",
validationresponse.parseDMNValidationResponse);
} catch (error) {
+ console.error(
+ `[Extended Services Extension] An error happened while trying to
validate ${dmnFile} from serviceUrl ${serviceURL}: ${error.message}`
+ );
throw new Error("VALIDATE DMN REQUEST ERROR: \n", error.message);
}
}
diff --git a/packages/extended-services-vscode-extension/webpack.config.js
b/packages/extended-services-vscode-extension/webpack.config.js
index d52f1fb6e7c..50be69a003d 100644
--- a/packages/extended-services-vscode-extension/webpack.config.js
+++ b/packages/extended-services-vscode-extension/webpack.config.js
@@ -18,6 +18,8 @@
*/
const { merge } = require("webpack-merge");
+const { EnvironmentPlugin } = require("webpack");
+const { env } = require("./env");
const common = require("@kie-tools-core/webpack-base/webpack.common.config");
const commonConfig = (webpackEnv) =>
@@ -30,21 +32,51 @@ const commonConfig = (webpackEnv) =>
},
externals: {
vscode: "commonjs vscode",
+ plugins: [],
},
- plugins: [],
});
-module.exports = async (webpackEnv) => [
- merge(commonConfig(webpackEnv), {
- target: "node",
- entry: {
- "extension/extension-main": "./src/extension/extension-main.ts",
- },
- }),
- merge(commonConfig(webpackEnv), {
- target: "web",
- entry: {
- "extension/extension-browser": "./src/extension/extension-browser.ts",
- },
- }),
-];
+// eslint-disable-next-line @typescript-eslint/ban-ts-comment
+// @ts-ignore
+const buildEnv = env; // build-env is not typed
+
+module.exports = async (webpackEnv) => {
+ const [extendedServices_urlHost, extendedServices_urlPort] =
getExtendedServicesArgs();
+
+ return [
+ merge(commonConfig(webpackEnv), {
+ target: "node",
+ entry: {
+ "extension/extension-main": "./src/extension/extension-main.ts",
+ },
+ plugins: [
+ new EnvironmentPlugin({
+ WEBPACK_REPLACE__extendedServicesUrlHost: extendedServices_urlHost,
+ WEBPACK_REPLACE__extendedServicesUrlPort: extendedServices_urlPort,
+ }),
+ ],
+ }),
+ merge(commonConfig(webpackEnv), {
+ target: "web",
+ entry: {
+ "extension/extension-browser": "./src/extension/extension-browser.ts",
+ },
+ plugins: [
+ new EnvironmentPlugin({
+ WEBPACK_REPLACE__extendedServicesUrlHost: extendedServices_urlHost,
+ WEBPACK_REPLACE__extendedServicesUrlPort: extendedServices_urlPort,
+ }),
+ ],
+ }),
+ ];
+};
+
+function getExtendedServicesArgs() {
+ const extendedServicesJavaHost = buildEnv.extendedServicesJava.host;
+ const extendedServicesJavaPort = buildEnv.extendedServicesJava.port;
+
+ console.info("Extended Services :: URL HOST " + extendedServicesJavaHost);
+ console.info("Extended Services :: URL PORT: " + extendedServicesJavaPort);
+
+ return [extendedServicesJavaHost, extendedServicesJavaPort];
+}
diff --git a/packages/kie-sandbox-distribution/package.json
b/packages/kie-sandbox-distribution/package.json
index 7337835482a..f5fc7882bec 100644
--- a/packages/kie-sandbox-distribution/package.json
+++ b/packages/kie-sandbox-distribution/package.json
@@ -37,7 +37,7 @@
"@types/jest": "^29.5.12",
"jest": "^29.7.0",
"jest-junit": "^16.0.0",
- "node-fetch": "^3.3.1",
+ "node-fetch": "^3.3.2",
"rimraf": "^3.0.2",
"run-script-os": "^1.1.6",
"ts-jest": "^29.1.5",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 254651552de..e7567068343 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -2353,8 +2353,8 @@ importers:
specifier: ^4.21.1
version: 4.21.1
node-fetch:
- specifier: ^3.3.1
- version: 3.3.1
+ specifier: ^3.3.2
+ version: 3.3.2
devDependencies:
'@babel/core':
specifier: ^7.16.0
@@ -5255,8 +5255,8 @@ importers:
specifier: ^11.0.0
version: 11.0.0([email protected]([email protected]))
node-fetch:
- specifier: ^3.3.1
- version: 3.3.1
+ specifier: ^3.3.2
+ version: 3.3.2
rimraf:
specifier: ^3.0.2
version: 3.0.2
@@ -7036,8 +7036,8 @@ importers:
specifier: ^16.0.0
version: 16.0.0
node-fetch:
- specifier: ^3.3.1
- version: 3.3.1
+ specifier: ^3.3.2
+ version: 3.3.2
rimraf:
specifier: ^3.0.2
version: 3.0.2
@@ -26792,8 +26792,8 @@ packages:
resolution: {integrity:
sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==}
engines: {node: ^10.17 || >=12.3}
- [email protected]:
- resolution: {integrity:
sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==}
+ [email protected]:
+ resolution: {integrity:
sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
[email protected]:
@@ -53150,7 +53150,7 @@ snapshots:
transitivePeerDependencies:
- domexception
- [email protected]:
+ [email protected]:
dependencies:
data-uri-to-buffer: 4.0.1
fetch-blob: 3.2.0
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]