Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 17 additions & 8 deletions src/main/modules/xmlProcessing/XmlProcessingService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
ConnectorData,
ChannelData,
DestinationConnectorData,
SourceConnectorData,
ServerConfiguration
} from '../../../models/'
import xml2js from 'xml2js'
Expand All @@ -21,8 +22,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
}
Expand Down Expand Up @@ -57,27 +64,29 @@ function parseXmlData(xmlData: string): Promise<ServerConfiguration> {

/**
* 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

return {
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],
enabled: sourceConnectorData.enabled[0],
...extractConnectorProperties(sourceConnectorData, ConnectorType.Source)
},
destinationConnectors: destinationConnectorsData.map(
(destinationConnectorData: DestinationConnectorData) => {
(destinationConnectorData: any) => {
return {
type: ConnectorType.Destination, // Required by ChannelData model
connectorName: destinationConnectorData.name[0],
id: channelData.id[0],
enabled: destinationConnectorData.enabled[0],
Expand All @@ -98,7 +107,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] ?? '',
Expand All @@ -122,4 +131,4 @@ function extractConnectorProperties(data, type: ConnectorType): ConnectorData {
smbHost: data.properties?.[0]?.host?.[0] ?? ''
}
return connectorProperties
}
}
Loading