@@ -963,6 +963,57 @@ export interface ExtractedParameters {
963963 [ key : string ] : string | number | boolean ;
964964}
965965
966+ function textOfStructured ( val : any ) : string | undefined {
967+ if ( ! val || typeof val !== 'object' ) return undefined ;
968+
969+ const parts : string [ ] = [ ] ;
970+ const processS = ( s : any ) : void => {
971+ if ( ! s ) return ;
972+ if ( s . r !== undefined ) {
973+ const rElements = Array . isArray ( s . r ) ? s . r : [ s . r ] ;
974+ for ( const r of rElements ) {
975+ if ( typeof r === 'number' ) {
976+ if ( r !== 0 ) parts . push ( String ( r ) ) ;
977+ continue ;
978+ }
979+ if ( typeof r === 'object' && r !== null ) {
980+ if ( '#text' in r ) parts . push ( String ( r [ '#text' ] ) ) ;
981+ else if ( '#cdata' in r ) parts . push ( String ( r [ '#cdata' ] ) ) ;
982+ else parts . push ( String ( r ) ) ;
983+ } else {
984+ parts . push ( String ( r ) ) ;
985+ }
986+ }
987+ }
988+ } ;
989+
990+ if ( val . p ) {
991+ const sElements = Array . isArray ( val . p . s ) ? val . p . s : val . p . s ? [ val . p . s ] : [ ] ;
992+ sElements . forEach ( processS ) ;
993+ } else if ( val . s ) {
994+ const sElements = Array . isArray ( val . s ) ? val . s : [ val . s ] ;
995+ sElements . forEach ( processS ) ;
996+ } else if ( val . r !== undefined ) {
997+ processS ( val ) ;
998+ }
999+
1000+ return parts . length > 0 ? parts . join ( '' ) . trim ( ) : undefined ;
1001+ }
1002+
1003+ function extractParamValue ( param : any ) : string | number | boolean | undefined {
1004+ if ( typeof param === 'string' ) return param ;
1005+
1006+ if ( param . p || param . s || ( param . r !== undefined && typeof param . r !== 'string' ) ) {
1007+ const structured = textOfStructured ( param ) ;
1008+ if ( structured !== undefined ) return structured ;
1009+ }
1010+
1011+ const simple = param [ '#text' ] ?? param . text ?? param . value ;
1012+ if ( simple !== undefined ) return simple as string | number | boolean ;
1013+
1014+ return textOfStructured ( param ) ;
1015+ }
1016+
9661017export function extractCommandParameters ( command : any ) : ExtractedParameters {
9671018 const parameters : ExtractedParameters = { } ;
9681019 const params = command . Parameter || command . parameter ;
@@ -973,7 +1024,7 @@ export function extractCommandParameters(command: any): ExtractedParameters {
9731024
9741025 for ( const param of paramArray ) {
9751026 const key = param [ '@_Key' ] || param . Key || param . key ;
976- let value = param [ '#text' ] ?? param . text ?? param . value ;
1027+ let value = extractParamValue ( param ) ;
9771028
9781029 if ( key && value !== undefined ) {
9791030 // Try to convert to number if it looks numeric
0 commit comments