From 9c6921fbfa655a2b50d2a9c6eb24b66aa8bde2f9 Mon Sep 17 00:00:00 2001 From: con-cis <54837156+con-cis@users.noreply.github.com> Date: Thu, 16 Oct 2025 21:54:34 +0200 Subject: [PATCH 1/2] Enhance XML processing with structure validation Added runtime check for expected structure in XML processing and updated extractProperties function to handle array input. --- .../xmlProcessing/XmlProcessingService.ts | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/modules/xmlProcessing/XmlProcessingService.ts b/src/main/modules/xmlProcessing/XmlProcessingService.ts index 8007cc7..0c54a43 100644 --- a/src/main/modules/xmlProcessing/XmlProcessingService.ts +++ b/src/main/modules/xmlProcessing/XmlProcessingService.ts @@ -21,8 +21,14 @@ export async function processXmlFile( ): Promise<{ extractedData: ExtractedData; metadata: MetaData }> { try { const result = await parseXmlData(xmlData) - const extractedData = extractProperties(result.serverConfiguration.channels[0].channel) - const metadata = { + // Add runtime check for expected structure + const channelsArray = + Array.isArray(result.serverConfiguration.channels) && + result.serverConfiguration.channels[0]?.channel + ? result.serverConfiguration.channels[0].channel + : [] + const extractedData = extractProperties(channelsArray) + const metadata: MetaData = { date: result.serverConfiguration.date[0], version: result.serverConfiguration.$.version } @@ -57,11 +63,11 @@ function parseXmlData(xmlData: string): Promise { /** * Extract properties from parsed data. - * @param data - The parsed XML data. + * @param data - The parsed XML data (array of channel data). * @returns Extracted data with typed structure. */ -function extractProperties(data): ExtractedData { - const channels: ChannelData[] = data.map((channelData) => { +function extractProperties(data: any[]): ExtractedData { + const channels: ChannelData[] = data.map((channelData: any) => { const sourceConnectorData = channelData.sourceConnector[0] const destinationConnectorsData = channelData.destinationConnectors[0].connector @@ -76,7 +82,7 @@ function extractProperties(data): ExtractedData { ...extractConnectorProperties(sourceConnectorData, ConnectorType.Source) }, destinationConnectors: destinationConnectorsData.map( - (destinationConnectorData: DestinationConnectorData) => { + (destinationConnectorData: any) => { return { connectorName: destinationConnectorData.name[0], id: channelData.id[0], @@ -98,7 +104,7 @@ function extractProperties(data): ExtractedData { * @param type - The connector type. * @returns Extracted connector properties with typed structure. */ -function extractConnectorProperties(data, type: ConnectorType): ConnectorData { +function extractConnectorProperties(data: any, type: ConnectorType): ConnectorData { const connectorProperties: ConnectorData = { inboundDataType: data.transformer?.[0]?.inboundDataType?.[0] ?? '', outboundDataType: data.transformer?.[0]?.outboundDataType?.[0] ?? '', From 3d4dc180316c7e9d2ffe0d59d1c8c2c8111d8916 Mon Sep 17 00:00:00 2001 From: con-cis <54837156+con-cis@users.noreply.github.com> Date: Thu, 16 Oct 2025 22:02:59 +0200 Subject: [PATCH 2/2] fix: add required type properties to sourceConnector and destinationConnectors in ChannelData to resolve TS2322 assignment errors --- src/main/modules/xmlProcessing/XmlProcessingService.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/modules/xmlProcessing/XmlProcessingService.ts b/src/main/modules/xmlProcessing/XmlProcessingService.ts index 0c54a43..01af488 100644 --- a/src/main/modules/xmlProcessing/XmlProcessingService.ts +++ b/src/main/modules/xmlProcessing/XmlProcessingService.ts @@ -4,6 +4,7 @@ import { ConnectorData, ChannelData, DestinationConnectorData, + SourceConnectorData, ServerConfiguration } from '../../../models/' import xml2js from 'xml2js' @@ -75,6 +76,7 @@ function extractProperties(data: any[]): ExtractedData { name: channelData.name[0], id: channelData.id[0], sourceConnector: { + type: ConnectorType.Source, // Required by ChannelData model id: channelData.id[0], connectorName: sourceConnectorData.name[0], transportName: sourceConnectorData.transportName[0], @@ -84,6 +86,7 @@ function extractProperties(data: any[]): ExtractedData { destinationConnectors: destinationConnectorsData.map( (destinationConnectorData: any) => { return { + type: ConnectorType.Destination, // Required by ChannelData model connectorName: destinationConnectorData.name[0], id: channelData.id[0], enabled: destinationConnectorData.enabled[0], @@ -128,4 +131,4 @@ function extractConnectorProperties(data: any, type: ConnectorType): ConnectorDa smbHost: data.properties?.[0]?.host?.[0] ?? '' } return connectorProperties -} +} \ No newline at end of file